小编典典

使用Python Scrapy时的HTTP 403响应

scrapy

我在Windows Vista 64位上使用Python.org版本2.7 64位。我一直在测试以下Scrapy代码以递归方式Scrapy所有页面,该页面用于足球统计数据:

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'])

该代码正在执行,没有任何错误,但是在Scrapy的4623个页面中,有217个的HTTP响应代码为200,第2个的代码为302,第4404个的代码为403。任何人都可以在代码中立即看到任何关于为什么会这样的明显信息吗?难道这是该站点的Scrapy措施?是否通常通过减慢提交次数来阻止这种情况的发生?


阅读 687

收藏
2020-04-10

共1个答案

小编典典

HTTP状态码403绝对意味着“ 禁止/拒绝访问”。
HTTP状态代码302用于重定向请求。无需担心它们。
你的代码似乎没有错。

是的,这绝对是网站实施的一项防Scrapy措施。

2020-04-10