打开Python爬虫实战练习页面被屏蔽IP后使用代理服务器爬取页面_E04_Spiderbuf,可以看到页面并不复杂,留意页面右下角有翻面数字。
在网页上点击右键 > 显示网页源代码,可以看到网页结构也并不复杂。往下滚动查看源码,第193 - 199行是翻页的源码,但与页面显示的页面数量显示不符。
仔细对比各个翻页的链接,可以看到页数为6的链接样式类名多出一个“trap”,回到页面对比,发现页面上没有显示这个页数为6的链接。查找CSS样式类名为trap的样式代码,在第55行可以看到display: none;这样的CSS代码,这个代码就是不显示的意思。
通常页面放了一个不显示的链接在代码里面,做爬虫的时候就要想到这可能就是网页开发者放的一个陷阱了。因为页面上不显示的链接普通用户是几乎不会访问到这个链接的,只有爬虫解析网页源码会取出这个链接进行访问。这个时候访问这个链接就有可能被简单粗暴地认为就是爬虫,然后直接封IP,此时在正常的浏览器也会出现无法访问该网页的情况。
遇到这种情况我们只需要在开发爬虫的时候跳过这样的链接即可。
倘若不小心被封了IP,但又急于爬取数据,就需要用到代理服务器了。
这里使用requests库作为示例,requests库的get函数本身就可以传递代理服务器,格式是字典类型,可以一次传递多个代理服务器IP及端口。至于代理服务器从哪里来?可以直接在网上搜免费代理服务器,把搜索到的结果中的协调、IP、端口信息整理成Python的字典类型,放在一个变量里,然后传递到requests.get函数即可。
proxies = {'http':'192.168.1.1:8080'}
html = requests.get(base_url, headers=myheaders, proxies=proxies).text
以上代理中的192.168.1.1:8080只是一个示例,具体按照你实际代理服务器的IP端口填写。
完整示例代码:示例代码