我有item
对象,我需要将它传递到许多页面以将数据存储在单个项目中
喜欢我的项目
class DmozItem(Item):
title = Field()
description1 = Field()
description2 = Field()
description3 = Field()
Run Code Online (Sandbox Code Playgroud)
现在这三个描述分为三个单独的页面.我想做些喜欢的事
现在这很适合 parseDescription1
def page_parser(self, response):
sites = hxs.select('//div[@class="row"]')
items = []
request = Request("http://www.example.com/lin1.cpp", callback =self.parseDescription1)
request.meta['item'] = item
return request
def parseDescription1(self,response):
item = response.meta['item']
item['desc1'] = "test"
return item
Run Code Online (Sandbox Code Playgroud)
但我想要类似的东西
def page_parser(self, response):
sites = hxs.select('//div[@class="row"]')
items = []
request = Request("http://www.example.com/lin1.cpp", callback =self.parseDescription1)
request.meta['item'] = item
request = Request("http://www.example.com/lin1.cpp", callback =self.parseDescription2)
request.meta['item'] = item
request = Request("http://www.example.com/lin1.cpp", callback …
Run Code Online (Sandbox Code Playgroud) 需要scrapy如何从一个页面获取链接然后按照此链接,从链接页面获取更多信息,并与第一页的一些数据合并...
谢谢
当我编写parse()
函数时,我可以为一个页面同时生成请求和项目吗?
我想在页面A中提取一些数据,然后将数据存储在数据库中,并提取要遵循的链接(这可以通过CrawlSpider中的规则来完成).
我称A页面的链接页面是B页面,所以我可以编写另一个parse_item()来从B页面中提取数据,但是我想在B页面中提取一些链接,所以我只能使用规则来提取链接?如何解决Scrapy中的重复URL?
经过多年不情愿地将抓取工具编码为正则表达式和 BeautifulSoup 等的大杂烩之后,我发现了Scrapy,我几乎把它当作今年给自己的圣诞礼物!它使用起来很自然,而且似乎是为了让几乎所有东西都变得优雅和可重复使用而构建的。
但我处于一种不知道如何处理的情况:我的蜘蛛爬行并抓取列表页面 A,从中生成一组项目。但对于每个项目,我需要获取一个不同的补充链接(由一些抓取的信息构建,但不是 Scrapy 可以跟踪的页面上的明确链接)以获取附加信息。
我的问题分为两部分:在爬网过程之外获取 URL 的协议是什么?如何以优雅的方式从多个来源构建项目?
在 StackOverflow 上的上一个问题中已经部分地提出(并回答)了这个问题。但我更感兴趣的是 Scrapy 的哲学在这个用例中应该是什么——肯定不是不可预见的可能性?我想知道这是否是管道注定要使用的事情之一(添加从主要信息推导出来的辅助来源的信息是一个“后处理”实例),但是最好的方法是什么?不是彻底搞乱了Scrapy高效的异步组织吗?
我正在抓取的网站包含许多玩家,当我点击任何玩家时,我可以进入他的页面.
网站结构如下:
<main page>
<link to player 1>
<link to player 2>
<link to player 3>
..
..
..
<link to payer n>
</main page>
Run Code Online (Sandbox Code Playgroud)
当我点击任何链接时,我会转到播放器的页面,如下所示:
<player name>
<player team>
<player age>
<player salary>
<player date>
Run Code Online (Sandbox Code Playgroud)
我想废弃年龄在20到25岁之间的所有球员.
使用第一个蜘蛛刮取主页面.
使用第一个蜘蛛获取链接.
使用第二个蜘蛛抓取每个链接.
使用第二个蜘蛛获取玩家信息.
使用管道将此信息保存在json文件中.
我怎样才能将date
值返回second spider
到first spider
我建立自己的middelware,我覆盖了process_spider_output
.它允许我打印请求但我不知道我还应该做什么才能将该date
值返回给我的第一个蜘蛛
任何帮助表示赞赏
以下是一些代码:
def parse(self, response):
sel = Selector(response)
Container = sel.css('div[MyDiv]')
for player in …
Run Code Online (Sandbox Code Playgroud) 所以我编写了一个蜘蛛,它从网页中提取某些所需的链接,并将URL,链接文本和其他信息(不一定包含在<a>
标记本身中)放入每个链接的项目中.
我应该如何将此项目传递给另一个抓取该项目中提供的URL的蜘蛛?