2014-07-17 40 views
6

我在Windows Vista 64位上使用Python.org版本2.7 64位。我一直在测试下面的代码Scrapy递归凑在现场www.whoscored.com,这是足球统计所有的网页:HTTP 403使用Python 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']) 

的代码没有任何错误的执行,但是4623页的刮,217获得了200的HTTP响应代码,2获得了302的代码并且4404获得了403响应。任何人都可以在代码中看到任何明显的东西,为什么这可能是?这可能是来自网站的反扒措施吗?通常的做法是减缓提交数量以阻止这种情况的发生?

感谢

回答

12

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

是的,它的绝对是由网站实施的反垃圾措施

参考这些原则从Scrapy文档:Avoid Getting Banned

此外,你应该考虑pausing and resuming crawls

+0

感谢您的回复...是的,我担心这将是任何刮相关的东西。我现在将阅读这些文档。谢谢。 – gdogg371