我在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。有人能在代码中看到任何明显的东西来解释这可能是什么原因吗?这可能是现场的防刮措施吗?为了阻止这种情况的发生,通常的做法是减少提交的数量吗?
谢谢
HTTP状态代码403绝对意味着禁止/拒绝访问
HTTP状态代码302用于请求的重定向。不用担心他们。
你的代码好像没什么问题。
是的,这肯定是网站实施的一项防刮措施。
参考这些来自废弃文档的指南:Avoid Getting Banned
另外,您应该考虑pausing and resuming crawls。
如果这仍然可用,我不知道,但是我必须在setting.py文件中放置下一行:
希望有帮助。
相关问题 更多 >
编程相关推荐