【发布时间】: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