【问题标题】:How can I programmatically detect if a site prohibits screen scraping?如何以编程方式检测网站是否禁止屏幕抓取?
【发布时间】:2015-09-20 19:54:45
【问题描述】:

我编写了一个小程序,它可以查找网页上的所有链接并将它们转储到一个列表中,然后遍历该列表,打开每个链接并收集这些页面上的所有链接。它做了 n 层深。

我正在使用 Beautiful Soup 来筛选刮擦。我遇到的问题之一是某些页面不允许屏幕抓取并使程序崩溃。我编写了一个 sn-p 代码,通过查找页面的标题标签是否显示“拒绝访问”来检测网站是否不允许抓取。具有此功能的网站使用 CloudFare 来阻止屏幕抓取。

>     links = []
>     for link in links:
>             if not nltk.clean_html(str(connect_to_webpage(link).find_all('title')))[2:15]
> == 'Access denied': #check link title tag to see if site says 'Access Denied'
>                 links.append(link)

但显然不是每个人都使用 Cloud Fare,所以有些情况它没有捕获并且程序崩溃。我可以添加一个通用条件来捕获屏幕刮板阻塞的所有实例吗?解决此问题的最佳方法是什么?谢谢。

【问题讨论】:

  • 对于初学者,你服从robots.txt吗?
  • 您可能还应该查看HTTP status code 并且只尝试解析2xx 响应。
  • “某些页面不允许屏幕抓取并导致程序崩溃” - 他们会怎么做?
  • 什么是“云票价”?还是你的意思是Cloudflare,
  • Cloudflare 就是我的意思。我得到的错误是: raise IOError, ('http error', errcode, errmsg, headers) IOError: ('http error', 401, 'Unauthorized', )

标签: python beautifulsoup screen-scraping


【解决方案1】:

尝试更改您的用户代理,

req = urllib.request.Request(url, None,headers={'User-Agent' : 'Mozilla/5.0'})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2015-05-08
    • 2011-11-29
    • 2011-09-19
    • 1970-01-01
    相关资源
    最近更新 更多