python – 带Splash的CrawlSpider
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 带Splash的CrawlSpider,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2901字,纯文字阅读大概需要5分钟。
内容图文
![python – 带Splash的CrawlSpider](/upload/InfoBanner/zyjiaocheng/773/1cc94ecd7cb14123978005656ddbb599.jpg)
我的蜘蛛有些问题.我使用带scrapy的splash来获取由JavaScript生成的“下一页”的链接.从第一页下载信息后,我想从以下页面下载信息,但LinkExtractor功能无法正常工作.但看起来start_request函数不起作用.这是代码:
class ReutersBusinessSpider(CrawlSpider):
name = 'reuters_business'
allowed_domains = ["reuters.com"]
start_urls = (
'http://reuters.com/news/archive/businessNews?view=page&page=1',
)
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, self.parse, meta={
'splash': {
'endpoint': 'render.html',
'args': {'wait': 0.5}
}
})
def use_splash(self, request):
request.meta['splash'] = {
'endpoint':'render.html',
'args':{
'wait':0.5,
}
}
return request
def process_value(value):
m = re.search(r'(\?view=page&page=[0-9]&pageSize=10)', value)
if m:
return urlparse.urljoin('http://reuters.com/news/archive/businessNews',m.group(1))
rules = (
Rule(LinkExtractor(restrict_xpaths='//*[@class="pageNext"]',process_value='process_value'),process_request='use_splash', follow=False),
Rule(LinkExtractor(restrict_xpaths='//h2/*[contains(@href,"article")]',process_value='process_value'),callback='parse_item'),
)
def parse_item(self, response):
l = ItemLoader(item=PajaczekItem(), response=response)
l.add_xpath('articlesection','//span[@class="article-section"]/text()', MapCompose(unicode.strip), Join())
l.add_xpath('date','//span[@class="timestamp"]/text()', MapCompose(parse))
l.add_value('url',response.url)
l.add_xpath('articleheadline','//h1[@class="article-headline"]/text()', MapCompose(unicode.title))
l.add_xpath('articlelocation','//span[@class="location"]/text()')
l.add_xpath('articletext','//span[@id="articleText"]//p//text()', MapCompose(unicode.strip), Join())
return l.load_item()
日志:
2016-02-12 08:20:29 [scrapy] INFO: Spider opened 2016-02-12 08:20:29 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2016-02-12 08:20:29 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
2016-02-12 08:20:38 [scrapy] DEBUG: Crawled (200) <POST localhost:8050/render.html>; (referer: None)
2016-02-12 08:20:38 [scrapy] DEBUG: Filtered offsite request to 'localhost': <GET http://localhost:8050/render.html?page=2&pageSize=10&view=page%3E;
2016-02-12 08:20:38 [scrapy] INFO: Closing spider (finished)
哪里出错?感谢帮助.
解决方法:
快速浏览一下,您不是使用splash调用start_request属性…例如,您应该使用SplashRequest.
def start_requests(self):
for url in self.start_urls:
yield SplahRequest(url, self.parse, meta={
'splash': {
'endpoint': 'render.html',
'args': {'wait': 0.5}
}
})
给你的Splash设置合适,就是在设置中你已经启用了必要的中间位置并且指向正确的/ url也使它们能够正常触发和HTTP缓存…不,我没有运行你的代码应该是好的现在去
编辑:顺便说一下…它的下一页不是js生成的
所以…除非你使用splash有任何其他原因,我认为没有理由在文章请求的初始解析中使用简单的for循环,如…
for next in response.css("a.control-nav-next::attr(href)").extract():
yield scrapy.Request(response.urljoin(next), callback=self.parse...
内容总结
以上是互联网集市为您收集整理的python – 带Splash的CrawlSpider全部内容,希望文章能够帮你解决python – 带Splash的CrawlSpider所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。