smo*_*les 1 python url variable-assignment scrapy scrape
我目前正在运行两个不同的scrapy爬虫.
第一个检索有关产品x的信息,第二个检索有关第一个机器人刮取的URL上的产品x的其他信息.
我的管道将每个产品的信息连接成多个文本文件,其中每个产品的信息占用一行数据,并作为不同的文本文件分成多个类别.
每个机器人显然都保持信息完整性,因为所有信息一次解析一个链接(因此每个文本文件的信息与其他文本文件逐行对齐).但是,据我所知,scrapy使用动态爬网机制,根据加载时间对网站进行爬网,而不是在start_url列表中进行排序.因此,我的第二个爬虫的信息与第一个爬虫的其他文本文件不对齐.
一个简单的解决方法是刮掉两个机器人找到的信息的"主键"(mysql fanboys)变体,从而可以通过按字母顺序排序主键并因此对齐数据来帮助在表中对齐产品信息手动.
然而,我目前的项目让我在寻找主键方面处于困境.第二个爬虫爬行具有有限唯一信息的网站,因此我将其结果链接回第一个爬虫的唯一方法是使用第一个爬虫识别的URL并将其链接到第二个爬虫中的相同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
Run Code Online (Sandbox Code Playgroud)
我希望能够将start_url存储为项目,就像在页面上找到的h1文本一样.
谢谢!
Guy*_*ely 12
你response.url
甚至可以从重定向中得到它response.request.url
,意思是:
item["start_url"] = response.request.url
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3795 次 |
最近记录: |