在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长。今天大众好像更倾向于用“网络数据采集”,有时会把网络数据采集程序称为网络机器人(bots)。最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用 HTML 表单或其他网页文件),然后对数据进行解析,提取需要的信息。
在采集网站的时会遇到一些比数据显示在浏览器上却抓取不出来更令人沮丧的事情。也许是向服务器提交自认为已经处理得很好的表单却被拒绝,也许是自己的 IP 地址不知道什么原因直接被网站封杀,无法继续访问。 那是因为很多网站有反爬虫机制,简单地说就是识别你的爬虫是个人还是个机器。我们下面讲到的就是如何把我们的爬虫伪装成一个人。
对于简单的静态HTML可以用python的爬虫库scrapy,或者使用更简单的urllib2来爬取,用beautiful来解析。
不会总是动态的,为了功能的需求,里面会有一些动态加载来满足动态需求,如果你用爬到的静态HTML解析后消失掉了一部分网页内容,那么,没错,这部分可能就是动态加载的。另外,为了保护数据,网站总是会设计一些奇奇怪怪的要求让你的爬虫不能得逞,只能让实实在在的人才能顺利的使用。下面的几条就是让你的爬虫看起来更像个人。
1.构造合适的请求头,里面放的的请求人的资料,特别是要修改修改User-Agent,使用python的requests包,修改其中的headers参数。 2.如果网站需要你登录怎么办呢?设置cookie,保证在同一个网站保持登录状态,使用Selenium结合Phantom JS 的deletecookie()、addcookie()和deleteallcookies()方法。 3.对于动态加载的问题, 用Selenium结合Phantom JS可以模拟人操作网页行为,完成网页JS的加载,解决动态网页不能被直接爬取的问题。 4.如果网站监测到你的爬虫可能会封掉你的IP,这时候要更换IP, 使用工具Tor,来将IP地址匿名。
这是一个范例,还是有一些十分简单的方法,可以让你的网络机器人看起来更像人类访问用户。下期再聊。
更多精彩内容可以进入www.dongnaoedu.com/python.html