爬虫介绍01:目标站背景调查

本文介绍爬虫策略的制定流程,包括分析robots.txt、利用Sitemap高效抓取、评估网站规模、解析网站技术栈及获取归属信息,以实现高效且合法的网页抓取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 检查robots.txt

大多数网站会准备一个 robot.txt 的文件,用来告知爬虫,我的站点有哪些限制。在爬去网站前,可以通过分析 robot.txt 文件来降低被封的几率,同时发现网站的结构。更多关于 robot.txt 的资料请参考:www.robotstxt.org。下面的代码是案例 robot.txt 文件内容,可以从链接:http://example.webscraping.com/robots.txt 获取。

# section 1
User-agent: BadCrawler
Disallow: /
# section 2
User-agent: *
Crawl-delay: 5
Disallow: /trap
# section 3
Sitemap: http://example.webscraping.com/sitemap.xml

在 section 1 中,robots.txt 使用 user agent BadCrawler 告知爬虫不要爬去该网站。但是这个东西形同虚设,有很多怕中可以直接直接按照 robotsbsite.txt 中给出的结构自动爬去整个站点。

在Section 2中, 为了防止使服务器过载,为所有 User-Agents 的下载请求设置了一个5秒的爬虫延迟。 Section 2中还声明了一个陷阱链接,/trap,一旦有爬虫访问了这个链接,服务器会短时间内或永久禁掉你的IP。

在 Section 3中,定义了一个Sitemap文件,会在下一节详解。

2. 检查 Sitemap

网站提供 Sitemap 文件来帮助爬虫们定位网站更新的内容,否则需要爬取每个页面。关于 Sitemap 相关知识,参考 http://www.sitemaps.org/protocol.html。下面是从 robots.txt 文件中获取的 Sitemap 文件的内容。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>http://example.webscraping.com/view/Afghanistan-1
</loc></url>
<url><loc>http://example.webscraping.com/view/Aland-Islands-2
</loc></url>
<url><loc>http://example.webscraping.com/view/Albania-3</loc>
</url>
...
</urlset>

Sitemap 提供了每个链接的URL信息,提高爬虫的爬去效率,但是 Sitemap 中的信息往往会出现丢失或不完整的情况。

3. 评估网站的规模

网站的规模决定了我们爬取的方式,如果只有你百个URL,那么效率就不是首要考虑的问题了。如果网站有百万级别的页面,全部爬取可能要花掉数月的时间。这个问题的解决办法,可以考虑并发下载或者分布式下载。

最快的评估方式,就是参考谷歌的爬虫,谷歌爬虫已经爬过了我们感兴趣的大部分站点。我们可以通过site关键字过滤出指定站点的相关信息。关于谷歌的高级检索功能,参考谷歌高级搜索页面的内容。

下面是我们使用谷歌查询站点的检索语句:site:example.webscraping.com

谷歌站点检索结果

图中看出,谷歌给出的评估:该站点大约有200个URL,这个结果和实际结果相近,但是据我观察,对于大些的网站,谷歌的评估大多不是很准确。我们通过细化site关键词,缩小检索范围,比如使用关键词 site:example.webscraping.com/view 检索出了所有国家相关页面。这样可以根据我们需要的数据,有针对性的爬取站点。

4. 查看目标站点使用的技术

目标站点搭建使用的技术也觉定了我们爬取的方式。我们可以通过buildwith模块来查看目标站的技术清单,该模块的安装方式:

pip install builtwith

模块接收一个目标站URL作为参数,并返回站点使用的技术清单,例如:

>>> import builtwith
>>> builtwith.parse('http://example.webscraping.com')
{u'javascript-frameworks': [u'jQuery', u'Modernizr', u'jQuery UI'],
u'programming-languages': [u'Python'],
u'web-frameworks': [u'Web2py', u'Twitter Bootstrap'],
u'web-servers': [u'Nginx']}

我们看到 example website 使用了 Web2py Python Web 框架以及一些常见的 JS 库,因此他的内容大多是嵌入HTML中,意味着我们可以直接爬取需要的数据。如果站点使用了 AngularJS,以为这它的内容是动态加载的。或者网站使用了 ASP.NET,那么爬取过程就需要用到 sessions 和 form submissions。关于 Dynamic Content 和 Interacting with Forms 回头我们再具体讨论。

下面看另外一个网站的查询结果:

>>> import builtwith
>>> builtwith.parse('http://www.jianshu.com')
{u'javascript-frameworks': [u'Modernizr'], u'web-frameworks': [u'Ruby on Rails'], u'programming-languages': [u'Ruby'], u
'web-servers': [u'Nginx']}

5. 查看目标站点的归属信息

有些站点的所有者,对自己站点设定了苛刻的爬取规则,对于此类目标,我们应该尽可能保守的开展工作。因此需要实现了解目标站的归属信息。这里,我们使用Python包装类模块 python-whois 来查询所需信息,首先安装这个工具:

pip install python-whois

下面是使用这个模块来查询站点 csnd.net 的 WHOIS 响应:

>>> import whois
>>> print whois.whois('appspot.com')
{
        ...
        "name_servers": [
        "NS1.GOOGLE.COM",
        "NS2.GOOGLE.COM",
        "NS3.GOOGLE.COM",
        "NS4.GOOGLE.COM",
        "ns4.google.com",
        "ns2.google.com",
        "ns1.google.com",
        "ns3.google.com"
    ],
        "org": "Google Inc.",
        "emails": [
            "abusecomplaints@markmonitor.com",
            "dns-admin@google.com"
    ]
}

我们看到,这个域名归属于谷歌,这个就是谷歌的 App Engine service 站点。 爬去这个站点的时候需要小心,因为谷歌经常会封掉爬这个站点的爬虫。

下面是优快云的 WHOIS 信息:

>>> import whois
>>> print whois.whois('youkuaiyun.com')
{
  "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": "youkuaiyun.com",
  "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@youkuaiyun.com"
  ]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值