python爬虫

Python爬虫学习笔记(BeautifulSoup4库:标签树的上、下、平行遍历)

独自空忆成欢 提交于 2020-01-19 22:43:18
BeautifulSoup4:beautifulsoup库是解析、遍历、维护“标签树”的功能库。安装参考requests库 用法: from bs4 import BeautifulSoup soup = BeautifulSoup(‘<p>data</p>’,’html.parser’) #测试 import requests from bs4 import BeautifulSoup r = requests.get("http://python123.io/ws/demo.html") r.text demo = r.text soup = BeautifulSoup(demo,"html.parser") #对demo进行HTML的解析 Soup2 =BeautifulSoup(open(“D://demo.html”),”html.parser”) #写入文档 print(soup.prettify()) #将Beautiful Soup的文档树格式化后以Unicode编码输出,每个XML/HTML标签都独占一行 基本解析器: bs4的HTML解析器:BeautifulSoup(mk,’html.parser’)(安装bs4) lxml的HTML解析库:BeautifulSoup(mk,’lxml’)(安装lxml) lxml的XML 解析库:BeautifulSoup

webmagic的设计机制及原理-如何开发一个Java爬虫 转

╄→尐↘猪︶ㄣ 提交于 2020-01-19 21:49:17
此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里: https://github.com/code4craft/webmagic/blob/master/user-manual.md 之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫。最近终于集中精力,花了三天时间,终于写完了这篇文章。之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方面倒是有一些心得,希望对读者有帮助。 webmagic的目标 一般来说,一个爬虫包括几个部分: 页面下载 页面下载是一个爬虫的基础。下载页面之后才能进行其他后续操作。 链接提取 一般爬虫都会有一些初始的种子URL,但是这些URL对于爬虫是远远不够的。爬虫在爬页面的时候,需要不断发现新的链接。 URL管理 最基础的URL管理,就是对已经爬过的URL和没有爬的URL做区分,防止重复爬取。 内容分析和持久化 一般来说,我们最终需要的都不是原始的HTML页面。我们需要对爬到的页面进行分析,转化成结构化的数据,并存储下来。 不同的爬虫,对这几部分的要求是不一样的。 <!--more--> 对于通用型的爬虫,例如搜索引擎蜘蛛,需要指对互联网大部分网页无差别进行抓取。这时候难点就在于页面下载和链接管理上--如果要高效的抓取更多页面,就必须进行更快的下载;同时随着链接数量的增多

爬虫利器BeautifulSoup模块使用

可紊 提交于 2020-01-19 19:43:40
一、简介 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,同时应用场景也是非常丰富,你可以使用它进行XSS过滤,也可以是使用它来提取html中的关键信息。 官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/ 二、安装 1.安装模块 easy_install beautifulsoup4 pip3 install beautifulsoup4 2.安装解析器(可以使用内置的解析器) #Ubuntu $ apt-get install Python-lxml #centos/redhat $ easy_install lxml $ pip install lxml 3.各个解释器优缺点比较 三、开始使用,基本属性介绍 创建对象 将一段文档传入BeautifulSoup 的构造方法,就能得到一个文档的对象, 可以传入一段字符串或一个文件句柄。 from bs4 import BeautifulSoup soup = BeautifulSoup(open("index.html")) soup = BeautifulSoup("<html><body>...</body></html>") ###使用解释器###

python3爬虫(3)--解析json数据

橙三吉。 提交于 2020-01-19 15:15:52
环境:python3 1、前言: 在做数据采集的过程中,我们经常遇到json格式的数据,如有道翻译就是json格式的数据。 在使用 requests库 进行请求时,我们可以直接使用 json() 方法,将字符串格式的json数据转化为字典格式,然后利用 字典的键-值索引和列表索引 配合使用解析json数据或者使用 get()方法和列表索引 解析。 在使用 urllib库 进行请求时,我们使用 json.loads(...) 方法,将字符串格式的json数据转化为字典格式,然后利用 字典的键-值索引和列表索引 配合使用解析json数据或者使用 get()方法和列表索引 解析。 2、解析json的方法案例 import json jsonString = '{"arrayOfNuns":[{"nunber":0},{"number":1},{"number":2}],\ "arrayOfFruits":[{"fruit":"apple"},{"fruit":"banana"},\ {"fruit":"pear"}]}' json0bj=json.loads(jsonString) print(type(json0bj)) #返回:<class 'dict'> print(json0bj.get("arrayOfNuns")) #输出:[{'nunber': 0}, {'number':

python爬虫爬取车标网所有车标Logo

被刻印的时光 ゝ 提交于 2020-01-19 03:54:58
1.依赖 requests、BeautifulSoup、lxml 2.代码 爬取网址: http://www.chebiao.com.cn/chebiao/ import requests from bs4 import BeautifulSoup list = ['A', 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'W', 'X', 'Y', 'Z'] #用于存车标网分类地址 newList = [] www = "http://www.chebiao.com.cn" #根据网站分析可知,每种开头的车标url分别为http://www.chebiao.com.cn/字母/ for i in list: temp = www + "/chebiao/" + i.lower() + "/" newList.append(temp) #用于存获取到的图片url地址 imgUrls = [] #用于存车标名字,顺序和图片顺序一致 nameList = [] #爬取图片地址 for x in newList: response = requests.get(x, timeout=3000) response.encoding = 'gbk' soup =

【Python】如何监控Python爬虫进程,实现异常重启或异常通知?

放肆的年华 提交于 2020-01-19 03:00:53
1.项目环境 基于 Python3.7 ,使用 Scrapy框架,正常抓取某网站搜索指数排名。 2.需求背景 由于网络时好时坏,有时候会遇到timeout这种延时错误,出错之后爬虫便会停止,如果没有第一时间重启,或者是排错,抓取效率便会十分低下。所以便想着有没有解决方法(爬虫项目是同事写的,跑在我电脑上,实习生打杂就完事了 3.解决思路 1.利用另外一个Python程序,监控该爬虫进程是否正常进行,同理也可以扩展到监控其他的程序是否正常运行。 2.利用Scrapy框架自身提供的中间件进行错误处理 3.1 进程监控 实现进程监控需要解决以下问题 如何用python获取电脑中运行的进程? 如何知道要监控的进程是否存活? 第一个问题使用python提供的os库可以解决 os.popen ( 'tasklist' ) tasklist : 输出电脑上当前所执行的程序名已经进程编号PID 该方法类似与在cmd命令行下所执行的效果一样,会将在cmd下执行的结果输出到缓冲流,因此我们也需要从缓冲流中把结果读出来。 os.popen ( 'tasklist' ) .read ( ) 第二个问题,我们可以使用新建子进程来解决这个问题 from multiprocessing import Process from scrapy import cmdline def execute_spider (

python爬虫高铁12306余票爬取

心不动则不痛 提交于 2020-01-19 01:14:35
import requests import pandas as pd import arrow import json import os from itertools import combinations os.chdir(r'C:/Users/Windows/Desktop') class HighSpeed(object): def __init__(self,date,from_station,to_station): self.date = date self.from_station = from_station self.to_station = to_station def get_pd(self): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/80.0.3970.5 Safari/537.36'} r = requests.get('https://www.12306.cn/kfzmpt/lcxxcx/query?purpose_codes=ADULT&queryDate='+self.date+'&from_station='+self.to_station+'&to_station='

scrapy + mogoDB 网站爬虫

半世苍凉 提交于 2020-01-18 22:36:51
工具环境 语言:python3.6 数据库:MongoDB (安装及运行命令如下) 1 python3 -m pip install pymongo 2 brew install mongodb 3 mongod --config /usr/local/etc/mongod.conf 框架:scrapy1.5.1 (安装命令如下) 1 python3 -m pip install Scrapy 用 scrapy 框架创建一个爬虫项目 在终端执行如下命令,创建一个名为 myspider 的爬虫项目 1 scrapy startproject myspider 即可得到一个如下结构的文件目录 创建 crawl 样式的爬虫 针对不同的用途, scrapy 提供了不同种类的爬虫类型,分别是 Spider:所有爬虫的祖宗 CrawlSpider:比较常用的爬取整站数据的爬虫(下面的例子就是用这种) XMLFeedSpider CSVFeedSpider SitemapSpider 先在命令行进入到 spiders 目录下 1 cd myspider/myspider/spiders 然后创建 crawl 类型的爬虫模板 1 scrapy genspider -t crawl zgmlxc www.zgmlxc.com.cn 参数说明: -t crawl 指明爬虫的类型 zgmlxc

爬虫——python——百度地图经纬度查询——经纬度查看地点地名——利用百度API获取地名经纬度——爬取所有的中国地址

不想你离开。 提交于 2020-01-18 19:05:03
import requests address = '40.8587960,86.866991' url = 'http://api.map.baidu.com/geocoder?output=json&key=f247cdb592eb43ebac6ccd27f796e2d2&location=' + str(address) response = requests.get(url) answer = response.json() print('得到反解数据', answer) 使用python爬虫 1 import requests 2 address = '40.8587960,86.866991' 3 url = 'http://api.map.baidu.com/geocoder?output=json&key=f247cdb592eb43ebac6ccd27f796e2d2&location=' + str(address) 4 response = requests.get(url) 5 answer = response.json() 6 print('得到反解数据', answer) 7 lng = answer['result']['location']['lng'] 8 lat = answer['result']['location']['lat'] 9

python爬虫实现火山周报表格程序

我的未来我决定 提交于 2020-01-18 18:11:51
import requests,bs4,re,xlwt from bs4 import BeautifulSoup def getHTMLText(url): try: r=requests.get(url) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: print("request failed") def getLocation(addr): demo=getHTMLText(addr) a = re.findall(r"\d+.\d+°\w", demo) latitude = re.split("°", a[0])[0] + re.split("°", a[0])[1] longitude = re.split("°", a[1])[0] + re.split("°", a[1])[1] b = re.search(r"elev. \d+[.\d+] m", demo) ele = re.search(r"\d+[.\d+]", b.group()).group() + "m" return [latitude, longitude, ele] def getObjectData(soup): li=[] for tr in soup.find('tbody')