Python - 网络爬虫(Web Scraping)

网络爬虫简介

网络爬虫何时使用

用于快速自动地获取网络信息,避免重复性的手工操作。

网络爬虫是否合法

网络爬虫目前人处于早期的蛮荒阶段,尚未针对“允许那些行为”取得广泛共识,是否合法要根据当地的法律法规来具体区分。
从目前的实践来看:

  • 如果抓取数据的行为用于个人使用,这不存在问题;
  • 如果数据用于转载,那么原创数据(比如,意见和评论)通常会受到版权限制,而现实生活中的真实数据(比如,营业地址、电话清单)一般不受版权限制。

为了避免出现糟糕的情景,建议:

  • 尽可能地了解当地相关的法律法规,尊重版权
  • 下载请求的速度限制在一个合理值之内
  • 设定一个专属的用户代理标识自己

背景调研

爬取一个网站之前,首先需要对目标站点的规模和结构进行一定的了解。

检查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)

posted @ 2018-06-13 23:42  Anliven  阅读(612)  评论(0编辑  收藏  举报