使用Python / Scrapy / Urllib2进行屏幕抓取似乎被阻止了

时间:2013-12-10 20:13:56

标签: python web-scraping scrapy urllib2

为了帮助我学习Python,我决定从“实时”页面(例如here)屏蔽ESPNFC网站上的足球评论。

直到一天前工作,但最终排除了一些东西,我去测试它,我回来的唯一一条评论是[u'Commentary Not Available']。

有没有人知道他们是如何做到的,以及任何简单快捷的方法?我正在使用Scrapy / Xpath和Urllib2。

编辑//

for game_id in processQueue:
    data_text = getInformation(game_id)
    clean_events_dict = getEvents(data_text)
    break

的作用不同
i = getInformation(369186)
j = getEvents(i)

在第一个示例中,processQueue是一个包含game_ids的列表。第一个是给脚本开始抓取的。在它有机会转移到另一个game_id

之前就已经打破了

在第二个示例中,我使用了一个游戏ID。

第一个失败,第二个失败,我完全不知道为什么。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试一些事情,假设您仍然可以从浏览器访问数据。但请记住,网站运营商通常都有权阻止您;这就是为什么依赖于抓取单个站点的项目是一个冒险的主张。他们在这里:

  • 每次刮擦之间延迟几秒钟
  • 每次刮擦之间延迟一个随机秒数
  • 在您的抓取会话期间接受Cookie
  • 在会话期间运行JavaScript(据我所知,Scrapy不可能)
  • 在多个IP范围之间共享抓取负载

我通常认为还有其他策略不太符合道德规范:

  • 修改您的用户代理字符串,使您的刮刀看起来像浏览器

suggest in this answer here应该设置刮刀以服从robots.txt。但是,如果您对刮刀进行编程以使其表现良好,那么网​​站运营商就会有更少的理由来解决您的问题。我在Stack Overflow标签中看到的最常见的错误就是刮刀运行得太快,并且它们意外地导致(次要)拒绝服务。所以,首先尝试减慢你的擦伤,看看是否有帮助。