python - 使用 Python Scrapy 时的 HTTP 403 响应

标签 python http scrapy

我在 Windows Vista 64 位上使用 Python.org 版本 2.7 64 位。我一直在测试以下 Scrapy 代码以递归地抓取网站 www.whoscored.com 上的所有页面,该网站用于足球统计:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy.item import Item
from scrapy.spider import BaseSpider
from scrapy import log
from scrapy.cmdline import execute
from scrapy.utils.markup import remove_tags


class ExampleSpider(CrawlSpider):
    name = "goal3"
    allowed_domains = ["whoscored.com"]
    start_urls = ["http://www.whoscored.com/"]
    rules = [Rule(SgmlLinkExtractor(allow=()), 
                  follow=True),
             Rule(SgmlLinkExtractor(allow=()), callback='parse_item')
    ]
    def parse_item(self,response):
        self.log('A response from %s just arrived!' % response.url)
        scripts = response.selector.xpath("normalize-space(//title)")
        for scripts in scripts:
            body = response.xpath('//p').extract()
            body2 = "".join(body)
            print remove_tags(body2).encode('utf-8')  


execute(['scrapy','crawl','goal3'])

代码的执行没有任何错误,但是在抓取的 4623 个页面中,217 个获得了 HTTP 响应代码 200,2 个获得了代码 302,4404 个获得了 403 响应。任何人都可以在代码中立即看出为什么会这样吗?这可能是网站的反抓取措施吗?通常的做法是减慢提交数量以阻止这种情况发生吗?

谢谢

最佳答案

HTTP 状态码403 绝对意味着禁止访问/拒绝访问
HTTP 状态代码 302 用于重定向请求。不用担心他们。
您的代码似乎没有错。

是的,这绝对是网站实现的反抓取措施

请引用 Scrapy 文档中的这些指南:Avoid Getting Banned

此外,您应该考虑 pausing and resuming crawls .

关于python - 使用 Python Scrapy 时的 HTTP 403 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24814028/

相关文章:

http - 从 net/http.Request.RemoteAddr 获取 IP 地址最干净的方法是什么

python - 如何使用 scrapy 和 python 动态抓取 Tripadvisor

python - Scrapy:通过管道从数据库获取Start_Urls

python - 更新 `axvspan`的位置

python - 在包含数字和字符串的列表上使用 max()

Delphi 使用 HTTP 上传文本文件

http - AngularJS $http 未定义

python - 通过滚动窗口在 Pandas 中高效地从多行创建宽表

python - Python中如何统计总分秒数

Python导入错误: 'Cannot import name'