我目前正在运行两个截然不同的抓取爬虫。
第一个检索有关产品x的信息,第二个检索有关在第一个机器人抓取的网址上找到的关于产品x的其他信息。
我的管道将每个产品的信息连接到多个文本文件中,其中每个产品的信息占用一行数据,并作为不同的文本文件分为多个类别。
每个机器人显然都保持信息完整性,因为一次一次解析所有信息(因此每个文本文件的信息与其他文本文件逐行对齐)。但是,我了解scrapy使用了动态爬网机制,该机制根据加载时间而不是start_url列表中的顺序对网站进行爬网。因此,第二个搜寻器的信息与第一个搜寻器的其他文本文件不一致。
一个简单的解决方法是,抓取两个机器人都找到的信息的“主键”(mysql fanboys)变体,从而可以通过按字母顺序对主键进行排序并由此对齐数据来帮助在表中对齐产品信息。手动。
但是,当前的项目使我在寻找主键方面处于困境。第二搜寻器使用唯一的有限信息来爬网网站,因此,我唯一将其发现链接回第一搜寻器的步骤就是使用第一搜寻器标识的网址并将其链接到第二搜寻器中相同的start_url。
有没有一种方法可以将在xhtmlselector的每次迭代中都被爬网的start_url分配给一个变量,然后可以将该变量推送到管道中,并在特定的url上爬网项/字段数据(在源代码中找不到该实例/实例的情况下) )?
这是我的代码:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from Fleche_Noire.items import FlecheNoireItem
import codecs
class siteSpider(BaseSpider):
name = "bbs"
allowed_domains = ["http://www.samplewebsite.abc"]
start_urls = [
'http://www.samplewebsite.abc/prod1',
'http://www.samplewebsite.abc/prod2',
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
items = []
item = FlecheNoireItem()
item["brand"] = []
item["age"] = []
item["prodcode"] = hxs.select('//h1/text()').extract() or [' ']
item["description1"] = []
item["description2"] = []
item["product"] = []
item["availability"] = []
item["price"] = []
item["URL"] = []
item["imgurl"] = []
items.append(item)
return items
我希望能够将start_url作为项目存储,就像在页面上找到的h1文本一样。
谢谢!
您可以从中获取,也可以从中获取response.url
重定向response.request.url
,这意味着:
item["start_url"] = response.request.url
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句