1)Urllib基础
爬网页
打开python命令行界面,两种方法:ulropen()爬到内存,urlretrieve()爬到硬盘文件。
同理,只需换掉网址可爬取另一个网页内容
上面是将爬到的内容存在内存中,其实也可以存在硬盘文件中,使用urlretrieve()方法
>>> urllib.request.urlretrieve("http://www.jd.com",filename="D:/test.html")
之后可以打开test.html,京东网页就出来了。由于存在隐藏数据,有些数据信息和图片无法显示,可以使用抓包分析进行获取。
2)浏览器伪装
尝试用上面的方法去爬取糗事百科网站url="https://www.qiushibaike.com/",会返回拒绝访问的回复,但使用浏览器却可以正常打开。那么问题肯定是出在爬虫程序上,其原因在于爬虫发送的请求头所导致。
打开糗事百科页面,如下图,通过F12,找到headers,这里主要关注用户代理User-Agent字段。User-Agent代表是用什么工具访问糗事百科网站的。不同浏览器的User-Agent值是不同的。那么就可以在爬虫程序中,将其伪装成浏览器。
将User-Agent设置为浏览器中的值,虽然urlopen()不支持请求头的添加,但是可以利用opener进行addheaders,opener是支持高级功能的管理对象。代码如下:
3)用户代理池
在爬取过程中,一直用同样一个地址爬取是不可取的。如果每一次访问都是不同的用户,对方就很难进行反爬,那么用户代理池就是一种很好的反爬攻克的手段。
第一步,收集大量的用户代理User-Agent
第二步,建立函数UA(),用于切换用户代理User-Agent
for循环,每访问一次切换一次UA
每爬3次换一次UA
foriinrange(0,10):if(i%3==0): UA() data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
(*每几次做某件事情,利用求余运算)
4)第一项练习-糗事百科爬虫实战
目标网站:https://www.qiushibaike.com/
需要把糗事百科中的热门段子爬取下来,包括翻页之后内容,该如何获取?
第一步,对网址进行分析,如下图所示,发现翻页之后变化的部分只是page后面的页面数字。
第二步,思考如何提取某个段子?查看网页代码,如下图所示,可以发现
第三步,利用上面所提到的用户代理池进行爬取。首先建立用户代理池,从用户代理池中随机选择一项,设置UA。