gpt4 book ai didi

python - 带有 Splash 的 CrawlSpider

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:42 25 4
gpt4 key购买 nike

我的蜘蛛有一些问题。我使用 splash 和 scrapy 来获取由 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 生成的

Next Page not JS generater

所以......除非有任何其他原因你使用 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35341268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com