【发布时间】:2021-06-10 20:08:44
【问题描述】:
我正在尝试制作一个蜘蛛,它可以从数据库中获取一些过时的 url,对其进行解析并更新数据库中的数据。我需要获取 scrape 的 url 和 ids 以使用它保存抓取数据的管道。
我编写了这段代码,但我不知道为什么 scrapy 会更改抓取链接的顺序,看起来像是随机的,所以我的代码分配了 ids 错误。如何为每个链接分配 id?
def start_requests(self):
urls = self.get_urls_from_database()
# urls looks like [('link1', 1), ('link2', 2), ('link3', 3)]
for url in urls:
# url ('link1', 1)
self.links_ids.append(url[1])
yield scrapy.Request(url=url[0], callback=self.parse, dont_filter=True)
def get_urls_from_database(self):
self.create_connection()
self.dbcursor.execute("""SELECT link, id FROM urls_table""")
urls = self.dbcursor.fetchall()
return urls
def parse(self, response):
item = ScrapyItem()
link_id = self.links_ids[0]
self.links_ids.remove(link_id)
...
item['name'] = name
item['price'] = price
item['price_currency'] = price_currency
item['link_id'] = link_id
yield item
由于未按顺序处理链接,因此将输出分配给数据库中的错误项目: 第1项的名称保存为第3项的名称,第8项的价格为第1项的价格等等。
【问题讨论】:
标签: python python-3.x scrapy