zoukankan      html  css  js  c++  java
  • Python

    网络爬虫简介

    网络爬虫何时使用

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

    网络爬虫是否合法

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

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

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

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

    背景调研

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

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

  • 相关阅读:
    【Git&GitHub idea中使用Git 03】
    【Git&GitHub 本地库和远程库交互 02】
    【Git&GitHub 本地库操作 01】
    C Primer Plus学习笔记【11章节】
    Python包,模块理解,以及通过元类自动化注册属性。
    pandas.DataFrame.from_dict的使用介绍
    C Primer Plus学习笔记 第10章 编程练习
    CMOS与BIOS的区别(转帖)
    Python 元类详解 __new__、__init__、__call__[补充说明]
    Python 元类详解 __new__、__init__、__call__[收官之作]
  • 原文地址:https://www.cnblogs.com/anliven/p/9180851.html
Copyright © 2011-2022 走看看