前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python基础学习_11_网页爬虫学习总结

Python基础学习_11_网页爬虫学习总结

作者头像
码农帮派
发布2020-04-01 15:01:55
4710
发布2020-04-01 15:01:55
举报
文章被收录于专栏:码农帮派码农帮派

一.关于爬虫的一些零散知识

1.Robots协议

大多数网站的主页下会有robots.txt文件,标识了爬虫爬取该网站信息时,哪些资源是有限制的,可以使用Python的标准库robotparser来检测将要爬取的url链接是否被允许:

打印结果:

2.识别网站使用的技术

利用builtwith模块可以检测出网站使用的技术信息:

打印结果:

3.查看网站所有者的信息

WHOIS协议可以查询到域名注册者的信息,Python中针对该协议的模块为whois:

打印结果:

二.下载网页

使用urllib2模块进行网页的下载,在上一篇博客中,拉取百度百科的词条获得词条对应的url,但url可能已经过期,我们再去拉取会报异常,所以需要使用try-except捕获异常:

使用urllib2下载网页的时候,可能会出现异常,其中code为4xx为请求异常,5xx为服务器错误,当URLError的code为5xx时,可以考虑重新发起请求:

(2-1)ID遍历爬虫

很多网站由于数据挺多,会采用page切换的方式展现数据,类似于:

http://www......../page=1

http://www......../page=2

这样的。可以使用循环,自动爬取每个page对应的数据。

【模块简介-itertools】

itertools模块模块用于生成各种循环器。

|- itertools.count(start, step) : 从start开始,每隔step生成一个数字,直到无穷大

|- itertools.cycle(seq):无限次的循环seq中的每一个item

|- itertools.repeat(item):无限循环输出item

因为我们并不知道page的最后一个数是多少,因此可以使用itertools进行无限次向后递进循环:

上面的代码中,当遇到某一page对应的url下载到的html_doc为None时,就认为已经到最后一页了,即停止继续爬取网页,但有些情况下,html_doc可能是因为某一page对应的网页失效,或其他原因而导致下载失败,但其后面的page对应url的网页正常,那么上面的代码就有问题了,需要进一步改进:

(2-2)链接爬虫

“百度百科”中爬取词条的时候,在每个词条网页中会包含相关的词条,我们可以使用爬虫对当前网页中其他词条信息进行抓取,这样就可以爬取得到大量的词条信息,但是我们会发现,爬取到的词条的url链接如下①:

① |- /view/76320.htm  相对链接

② |- http://baike.baidu.com/view/76320.htm  绝对链接

而完整的url如②,①为相对链接,它不包括协议和服务器部分,②为绝对链接,对于浏览器来说,绝对/相对链接都可以被识别,但对于urllib2来说,只能识别绝对链接,因为要将相对链接拼接成为绝对链接,此时可以使用urlparse模块进行拼接,将相对链接url_relative拼接为绝对链接url_full:

(2-3)支持代理

有些url的访问需要一个代理IP:

由此完整的downloadHtml()函数可以写成如下的方式:

(2-4)下载限速

有些网站访问对访问速度进行了限制,为了不让爬虫被禁止,需要对爬虫下载网页的速度进行一定的限制:

上面的类,使用了一个字典,来存储每个域名最近一次访问的时间,每次访问一个域名的url的时候,比对上次访问时间,要是没有超过延时delay,则进行相应时间的sleep操作,否则继续访问,有了上面的类,我们就可以实现下载限速的目的:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农帮派 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档