简介
1:组成:爬虫节点,控制节点和资源库。
控制节点,也叫中央控制器,主要负责根据url地址分配线程,并调用爬虫节点进行具体的爬行。
爬虫节点会按照具体的算法,对网页进行具体的爬行,主要包括下载网页以及对网页的文本进行处理,爬行后会将结果储存到对应资源库中。
2:类型:通用网络爬虫,聚焦网络爬虫,增量式网络爬虫,深层网络爬虫。
增量式更新:指更新时只更新改变的地方,未改变就不更新。
深层网络爬虫:爬取深层网页,需要想办法自动填写对应表单,填写有两种类型:基于领域知识的表单填写(建立一个填写表单的关键词库,在需要填写时根据语义分析自动填写)和基于网页结构分析的表单填写(一般是领域知识有限使用,根据网页结构分析自动填写)。
聚焦网络爬虫:构成:初始url集合,url队列,页面爬行模块,页面分析模块,页面数据库,链接过滤模块,内容评价模块,链接评价模块等。
3:爬行策略~选取url爬行顺序:深度|广度优先、大站优先、反链策略等
OPIC策略、PartialPageRank策略
一个网页的反向链接数:该网页被其他网页指向的次数(可能代表该网页被其他网页推荐次数)
4:网页更新策略:
用户体验策略:大部分用户只会关心排名靠前的网页,所以优先更新排名靠前的网页。
历史数据策略:依据历史更新数据通过泊松过程进行建模预测下次更新时间。
聚类分析策略:按照物以类聚的思想,根据每个类的网页抽样结果的平均更新值,确定每个聚类的爬行频率。
5:网页分析算法
基于用户行为的网页分析算法:会依据用户对网页的访问行为进行评价。
基于网络拓扑的网页分析算法:依靠网页的链接关系、结构关系、已知网页或数据等对网页进行分析的一种算法。
6:身份识别
爬虫在对网页进行爬取得时候,会通过HTTP请求中的User Agent字段告知自己的身份。
爬虫访问一个网站的时候会根据该站点下的Robots.txt文件来确定可以爬取的网页范围,Robot协议是需要网络爬虫共同遵守的协议。
Urllib库:
是python提供的一个操纵URL的模块。
快速使用爬取网页.html
方式一: 思路:
首先将爬取得内容读取出来赋值给一个变量data。
再以写入的方式打开一个本地文件命名为*.html等的网页格式
之后将data中的值写入该文件中,关闭该文件。
#使用:目的爬取一个百度首页的网页写入1.html,
import urllib.request
file=urllib.request.urlopen("http://www.baidu.com")
data=file.read() #读取全部内容
#dataline=file.readline() #读取一行内容,会把内容给一个列表变量
#print(dataline)#输出爬取内容的第一行
#print(data)#爬取内容全部
fhandle=open("D:/crawler/1.html","wb")#将该data内容写入该目录下的html
fhandle.write(data)
fhandle.close()
方式二:使用urlretrieve()函数爬取网页
import urllib.request
filename=urllib.request.urlretrieve("http://edu.51cto.com",filename="D:/crawler/2.html")
urllib.request.urlcleanup() #用于清除缓存
其他相关方法
info=file.info()#返回环境相关信息
print(info)
code=file.getcode()#获取状态码
print(code)
url=file.geturl()#获取爬取的url地址
print(url)
对网页进行编码、解码
urllib.request.quote("http://www.sina.com.cn")#编码
#编码后:http%3A//www.sina.com.cn
urllib.request.unquote("http%3A//www.sina.com.cn")#解码
#解码后:http://www.sina.com.cn
反爬虫设置
有时候爬取网页会出现403错误,这是对方网页进行了反爬虫设置
这时我们可以设置Header属性,模拟浏览器去访问这些网站。
import urllib.request
url="http://blog.csdn.net/weiwei_pig/articledetails/51178226"
file=urllib.request.urlopen(url)
#执行后出现403错误
此时我们打开百度首页按 F12 这时会出现一个窗口,我们切换到NetWork标签页,然后单击百度一下让网页发生一个动作
这时点击NetWork下面出现的www.baidu.com,之后右边出现页面切换到Header,向下翻找到User-Agent字样的信息,复制下来。
得到信息:
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
接下来有两种方法:
1:使用build_opener()修改报头
使用urllib.request.build_opener()
import urllib.request
url="http://blog.csdn.net/weiwei_pig/article/details/51178226"
headers={"User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
opener=urllib.request.build_opener()
opener.addheaders=[headers]
data=opener.open(url).read()
#接下来写入文件
fhandle=open("D:/crawler/4.html","wb")
fhandle.write(data)
fhandle.close()
2:使用add_header()添加报头
import urllib.request
url="http://blog.csdn.net/weiwei_pig/article/details/51178226"
req=urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')
data=urllib.request.urlopen(req).read()
fhandle=open("D:/crawler/4.html","wb")
fhandle.write(data)
fhandle.close()
此文是我在学习《精通Python网络爬虫》(韦玮著)的总结,纯手打。