使用Python Scrapy时的HTTP 403响应

2024-09-29 08:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我在WindowsVista 64位上使用Python.org版本2.764位。我一直在测试下面的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。有人能在代码中看到任何明显的东西来解释这可能是什么原因吗?这可能是现场的防刮措施吗?为了阻止这种情况的发生,通常的做法是减少提交的数量吗?

谢谢


Tags: 代码fromimportcom网站responsewwwscripts
2条回答

HTTP状态代码403绝对意味着禁止/拒绝访问
HTTP状态代码302用于请求的重定向。不用担心他们。
你的代码好像没什么问题。

是的,这肯定是网站实施的一项防刮措施。

参考这些来自废弃文档的指南:Avoid Getting Banned

另外,您应该考虑pausing and resuming crawls

如果这仍然可用,我不知道,但是我必须在setting.py文件中放置下一行:

HTTPERROR_ALLOWED_CODES  =[404]
USER_AGENT = 'quotesbot (+http://www.yourdomain.com)'
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36"

希望有帮助。

相关问题 更多 >