当前位置: 首页 > 面试题库 >

使用Python Scrapy时的HTTP 403响应

萧胜
2023-03-14
问题内容

我在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措施?是否通常通过减慢提交次数来阻止这种情况的发生?


问题答案:

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

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



 类似资料:
  • 问题内容: 我有一个简单的代码,可为文本文件(url_list.txt)中列出的每个URL打印GET响应时间。 当顺序触发请求时,返回的时间对应于各个URL的预期响应时间。 但是,当同时执行相同的代码时,返回的响应时间通常比预期的要高。 看来我在http.Get(url)调用之前捕获的 time_start 并不是实际发送请求的时间。我猜http.Get(url)的执行排队了一段时间。 使用gor

  • 我用JacksonAnnotationIntrospector设置了一个自定义注释,以便根据API版本吐出正确的属性名称。根据API版本,有一个助手类可以输出正确的ObjectMapper。 还有一个帮助函数用于测试序列化 在这样的单元测试中: 现在,假设我有这样的东西: 用户扩展实体时: 我知道映射程序单独返回正确的JSON。我可以直接把电话插进去。实体(),但这会导致我们的测试出现问题,测试会

  • 问题内容: 我正在使用api调用,它正在发送一些自定义标头,例如。但是我还不知道如何阅读它们。在函数内部,是一个应该给我所有标头的哈希值的函数,但仅显示标头。有没有办法获取响应头? 问题答案: 自定义标题将在同一域中可见。但是,对于跨域情况,服务器必须发送标头以使自定义标头可见。

  • 我正在使用postman来测试我有的API,当请求不包含子域时一切都很好,然而当我将子域添加到URL时,我得到的是这个响应。 代理配置错误确保在“设置”>“代理”中正确配置代理 请求超时:在“设置”>“常规”中更改请求超时 如果我从postman复制相同的URL并将其粘贴到浏览器中,我会得到正确的响应,是否有某种配置我应该做使postman与子域一起工作?

  • 使用 Windows 7 和 Soap 5.2.0 免费软件。 我也在Smart Bear社区询问过这一点,他们只给了我推荐阅读的帖子。这些帖子与这个问题无关。 我有一个 REST 项目,它有一个测试套件和一个包含两个测试步骤的测试用例。第一步是一个时髦的步骤,带有一个时髦的脚本,它调用第二个测试步骤。第二个测试步骤是 REST GET 请求,该请求将字符串发送到我们的 API 服务器,并以 JS

  • 无法得到任何回应 连接到http://subdomain.localhost:port/api/时出错 为什么会发生这种情况: 如果我从postman复制相同的URL并将其粘贴到浏览器中,我会得到适当的响应,是否应该进行某种配置来使postman与子域一起工作?