python-Scrapy-获取正在解析的项目的索引?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-Scrapy-获取正在解析的项目的索引?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1729字,纯文字阅读大概需要3分钟。
内容图文
![python-Scrapy-获取正在解析的项目的索引?](/upload/InfoBanner/zyjiaocheng/680/a1f1f63bd3494c188ddfc99916874377.jpg)
我正在尝试使用Scrapy从数据库加载一些XPATH规则.
到目前为止,我编写的代码运行良好,但是经过一些调试后,我意识到Scrapy正在异步解析每个项目,这意味着我无法控制要解析哪个项目的顺序.
我想做的是找出命中parse()函数的列表中当前正在解析的项,因此我可以将该索引引用到数据库中的行并获取正确的XPATH查询.我目前这样做的方式是使用一个名为item_index的变量,并在每次项目迭代后将其递增.现在我意识到这还不够,我希望有一些内部功能可以帮助我实现这一目标.
有谁知道跟踪此事的正确方法?我已经浏览了文档,但是找不到有关它的任何信息.我也看了Scrapy source code,但似乎无法弄清楚URL列表是如何存储的.
这是我的代码来进一步解释我的问题:
# -*- coding: utf-8 -*-
from scrapy.spider import Spider
from scrapy.selector import Selector
from dirbot.items import Product
from dirbot.database import DatabaseConnection
# Create a database connection object so we can execute queries
connection = DatabaseConnection()
class DmozSpider(Spider):
name = "dmoz"
start_urls = []
item_index = 0
# Query for all products sold by a merchant
rows = connection.query("SELECT * FROM products_merchant WHERE 1=1")
def start_requests(self):
for row in self.rows:
yield self.make_requests_from_url(row["product_url"])
def parse(self, response):
sel = Selector(response)
item = Product()
item['product_id'] = self.rows[self.item_index]['product_id']
item['merchant_id'] = self.rows[self.item_index]['merchant_id']
item['price'] = sel.xpath(self.rows[self.item_index]['xpath_rule']).extract()
self.item_index+=1
return item
任何指导将不胜感激!
谢谢
解决方法:
您可以使用Request.meta将索引(或数据库中的行ID)与请求一起传递.这是您可以从处理程序中的Response.meta访问的字典.
例如,在构建请求时:
请求(URL,回调= self.some_handler,元= {‘row_id’:row [‘id’]})
像您尝试的那样使用计数器是行不通的,因为您不能保证响应的处理顺序.
内容总结
以上是互联网集市为您收集整理的python-Scrapy-获取正在解析的项目的索引?全部内容,希望文章能够帮你解决python-Scrapy-获取正在解析的项目的索引?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。