Python scrapy在shell中工作,但爬网0页
我使用scrapy解析以下站点:。当我通过shell一步一步地解析时,一切都很顺利,也就是说,这行代码可以工作:Python scrapy在shell中工作,但爬网0页,python,scrapy,Python,Scrapy,我使用scrapy解析以下站点:。当我通过shell一步一步地解析时,一切都很顺利,也就是说,这行代码可以工作: response.xpath("//script[contains(., 'banksData')]/text()").re(r'"name":"(.*?)","code"') 但当我开始爬行时,我会看到下面的日志 2017-06-16 20:59:27 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: banksru) 201
response.xpath("//script[contains(., 'banksData')]/text()").re(r'"name":"(.*?)","code"')
但当我开始爬行时,我会看到下面的日志
2017-06-16 20:59:27 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: banksru)
2017-06-16 20:59:27 [scrapy.utils.log] INFO: Overridden settings: {'BOT_NAME': 'banksru', 'FEED_FORMAT': 'json', 'NEWSPIDER_MODULE': 'banksru.spiders', 'SPIDER_MODULES': ['banksru.spiders'], 'FEED_URI': 'banki.json'}
2017-06-16 20:59:27 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.logstats.LogStats',
'scrapy.extensions.telnet.TelnetConsole',
'scrapy.extensions.corestats.CoreStats',
'scrapy.extensions.feedexport.FeedExporter']
2017-06-16 20:59:28 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
2017-06-16 20:59:28 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware']
2017-06-16 20:59:28 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2017-06-16 20:59:28 [scrapy.core.engine] INFO: Spider opened
2017-06-16 20:59:28 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2017-06-16 20:59:28 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2017-06-16 20:59:28 [scrapy.core.engine] DEBUG: Crawled (429) <GET http://www.banki.ru/services/responses/> (referer: None)
2017-06-16 20:59:28 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <429 http://www.banki.ru/services/responses/>: HTTP status code is not handled or not allowed
2017-06-16 20:59:28 [scrapy.core.engine] INFO: Closing spider (finished)
2017-06-16 20:59:28 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 229,
'downloader/request_count': 1,
'downloader/request_method_count/GET': 1,
'downloader/response_bytes': 119,
'downloader/response_count': 1,
'downloader/response_status_count/429': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2017, 6, 16, 17, 59, 28, 827696),
'httperror/response_ignored_count': 1,
'httperror/response_ignored_status_count/429': 1,
'log_count/DEBUG': 2,
'log_count/INFO': 8,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2017, 6, 16, 17, 59, 28, 573054)}
2017-06-16 20:59:28 [scrapy.core.engine] INFO: Spider closed (finished)
我尝试实现的代码很简单:
import scrapy
class BankRating(scrapy.Spider):
name = "banki"
start_urls = [
"http://www.banki.ru/services/responses/",
]
def parse(self, response):
name = response.xpath("//script[contains(., 'banksData')]/text()").re(r'"name":"(.*?)","code"')
rating = response.xpath("//script[contains(., 'ratingData')]/text()").re(r'"rating":(.*?),"responseCount"')
avg_grade = response.xpath("//script[contains(., 'ratingData')]/text()").re(r'"middleGrade":(.*?),"middleRating"')
checked_responses = response.xpath(
"//script[contains(., 'ratingData')]/text()").re(r'"checkedResponseCount":(.*?),"checkedResponseCountForYear"')
num_responses = response.xpath("//script[contains(., 'ratingData')]/text()").re(r'"responseCount":(.*?),"responseCountForYear"')
solved_problems = response.xpath(
"//script[contains(., 'ratingData')]/text()").re(r'"solvedResponseCount":(.*?),"withAgentAnswer"')
bank_answers = response.xpath("//script[contains(., 'ratingData')]/text()").re(r'"withAgentAnswer":(.*?),"middleGrade"')
yield name, rating, avg_grade, checked_responses, num_responses, solved_problems, bank_answers
我的机器有win8.1,scrapy是为python 3.5安装的。提前感谢您的帮助当请求出现问题时,站点会尝试保护自己,以响应不同的状态 这种特殊情况很常见,但很简单。您可以使用通用的
用户\u代理绕过它:
设置.py
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0'
因为默认情况下,scrapy
使用如下内容:
"Scrapy/1.3.0 (+http://scrapy.org)"
当请求出现问题时,站点会尝试保护自己,以响应不同的状态
这种特殊情况很常见,但很简单。您可以使用通用的用户\u代理绕过它:
设置.py
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0'
因为默认情况下,scrapy
使用如下内容:
"Scrapy/1.3.0 (+http://scrapy.org)"
Scrapy作为一个bot,在服务器上非常资源密集型,因为它非常快速,并且进行异步调用,因此需要遵循一些明确的指导原则。这些都是为了使爬行工作在一个更宽容和友好的方式,而不会造成任何损害的网络。
小瓦尔迪尔·斯图姆(Valdir Stumm Jr.)在博客中漂亮地突出了这些
- 网站所有者使用该文件向网络机器人提供有关其网站的说明;这被称为机器人排除协议。此文件通常在网站的根目录下可用,您的爬虫程序应遵循由此定义的规则
- 网站可以处理的请求数量差别很大。根据当前web服务器负载自动调整请求之间的延迟。它首先计算一个请求的延迟。然后,它将调整同一域的请求之间的延迟,以使同时激活的AUTOTHROTTLE_TARGET_并发请求不超过个
在中启用这些应该允许scrapy在网站中爬行。感谢您指出“HTTP代码429:这意味着在给定的时间段内发送太多请求”因为bot在服务器上非常资源密集型,因为它非常快速并进行异步调用,因此需要遵循一些明确的指导原则。这些都是为了使爬行工作在一个更宽容和友好的方式,而不会造成任何损害的网络。
小瓦尔迪尔·斯图姆(Valdir Stumm Jr.)在博客中漂亮地突出了这些
- 网站所有者使用该文件向网络机器人提供有关其网站的说明;这被称为机器人排除协议。此文件通常在网站的根目录下可用,您的爬虫程序应遵循由此定义的规则
- 网站可以处理的请求数量差别很大。根据当前web服务器负载自动调整请求之间的延迟。它首先计算一个请求的延迟。然后,它将调整同一域的请求之间的延迟,以使同时激活的AUTOTHROTTLE_TARGET_并发请求不超过个
在中启用这些应该允许scrapy在网站中爬行。感谢您指出“HTTP代码429:这意味着在给定的时间段内发送过多的请求”您似乎收到了HTTP代码429,这意味着在给定的时间段内发送过多的请求。请尝试在设置中启用AUTOTHROTTLE_=True。py@KaushikNP谢谢。删除了#对于用户代理,ROBOTSTXT_服从,启用了自动锁定功能,运行正常。确定。很高兴为您提供帮助。将哈希标记删除到“取消注释”代码行以使其正常工作非常重要。看起来您得到的是HTTP代码429,这意味着在给定的时间段内发送了太多请求。请在“设置”中尝试启用AUTOTHROTTLE_=True。py@KaushikNP谢谢。删除了#对于用户代理,ROBOTSTXT_服从,启用了自动锁定功能,运行正常。确定。很高兴能提供帮助。删除hashtag以取消注释代码行以使其正常工作是一种重要的lol