网络爬虫简介
网络爬虫何时使用
用于快速自动地获取网络信息,避免重复性的手工操作。
网络爬虫是否合法
网络爬虫目前人处于早期的蛮荒阶段,尚未针对“允许那些行为”取得广泛共识,是否合法要根据当地的法律法规来具体区分。
从目前的实践来看:
- 如果抓取数据的行为用于个人使用,这不存在问题;
- 如果数据用于转载,那么原创数据(比如,意见和评论)通常会受到版权限制,而现实生活中的真实数据(比如,营业地址、电话清单)一般不受版权限制。
为了避免出现糟糕的情景,建议:
- 尽可能地了解当地相关的法律法规,尊重版权
- 下载请求的速度限制在一个合理值之内
- 设定一个专属的用户代理标识自己
背景调研
爬取一个网站之前,首先需要对目标站点的规模和结构进行一定的了解。
检查robot.txt
大多数网站定义的robot.txt文件表明了爬取该网站时存在哪些限制。
这些限制虽然作为建议值给出,但仍建议遵守,否则很可能导致网站封禁抓取行为。
更多信息可参考:http://www.robotstxt.org/
示例:
https://www.bing.com/robots.txt
http://www.csdn.net/robots.txt
https://www.oschina.net/robots.txt
检查网站地图
网站提供的Sitemap文件(即网站地图)可以帮助爬虫定位网站最新的内容,而无须爬取每一个网页。
但该文件经常存在缺失、 过期或不完整的问题。
更多信息可参考:http://www.sitemaps.org/protocol.html
示例:
http://www.bing.com/images/sitemap.xml
http://www.csdn.net/article/sitemap.txt
http://www.oschina.net/sitemap.xml
估算网站大小
目标网站的大小会影响如何进行爬取的方式。
估算网站大小的一个简便方法是利用搜索引擎爬虫的结果,因为很有可能搜索引擎已经爬取过目标网站。
可以通过搜索引擎的site关键词过滤域名结果,从而获取该信息。但对于特殊限制或者更大型的网站,搜索引擎的估算并不十分准确。
常用搜索引擎命令
1.3.4 识别网站所用技术
builtwith模块:检查网站构建的技术类型
安装模块:pip install builtwith
示例:
>>> builtwith.parse( 'http://127.0.0.1:8000/places')
{u'javascript-frameworks': [u'jQuery', u'Modernizr', u'jQuery UI'], u'web-frameworks': [u'Web2py', u'Twitter Bootstrap'], u'programming-languages': [u'Python']}
>>>
>>> builtwith.parse( 'http://www.bing.com')
{u'javascript-frameworks': [u'RequireJS'], u'operating-systems': [u'Windows Server'], u'web-servers': [u'IIS']}
>>>
寻找网站所有者
使用WHOIS协议查询域名的注册者。
python-whois模块:Python针对WHOIS协议的封装库
安装模块:pip install python-whois -i https://mirrors.ustc.edu.cn/pypi/web/simple/
示例:
>>> print whois.whois('www.csdn.net')
{
"updated_date": [
"2014-11-26 00:00:00",
"2015-01-28 23:17:54"
],
"status": "clientTransferProhibited https://icann.org/epp#clientTransferProhibited",
"name": "Beijing Chuangxin Lezhi Co.ltd",
"dnssec": "Unsigned",
"city": "Beijng",
"expiration_date": [
"2017-03-11 00:00:00",
"2017-03-11 05:00:00"
],
"zipcode": "100016",
"domain_name": "CSDN.NET",
"country": "CN",
"whois_server": "whois.networksolutions.com",
"state": "Beijing",
"registrar": "NETWORK SOLUTIONS, LLC.",
"referral_url": "http://networksolutions.com",
"address": "B3-2-1 ZHaowei Industry Park",
"name_servers": [
"NS3.DNSV3.COM",
"NS4.DNSV3.COM"
],
"org": "Beijing Chuangxin Lezhi Co.ltd",
"creation_date": [
"1999-03-11 00:00:00",
"1999-03-11 05:00:00"
],
"emails": [
"abuse@web.com",
"Jiangtao@CSDN.NET"
]
}
>>>
参考信息
从零开始写Python爬虫:https://zhuanlan.zhihu.com/Ehco-python)