You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Scrapy/Python3.6中使用for循环遍历EAN数组及代码放置位置

嘿,我来帮你搞定这个Scrapy爬虫的循环遍历问题!你需要的for循环应该放在Scrapy Spider的start_requests()方法里,这是爬虫生成初始爬取请求的标准入口,正好适合逐个遍历你的EAN数组并发起爬取。

完整代码示例(标注循环位置)

我先帮你补全代码并优化结构,重点标注出for循环的放置位置:

import scrapy
import re
import MySQLdb

class ProductSpider(scrapy.Spider):
    name = 'product'
    # 初始化空的EAN列表
    EAN = []

    def __init__(self, *args, **kwargs):
        super(ProductSpider, self).__init__(*args, **kwargs)
        # 在这里初始化数据库连接(比类级别定义更安全,避免重复连接)
        self.db = MySQLdb.connect(
            host="localhost",
            user="root",
            passwd="",
            db="ProductSpider"
        )
        self.cur = self.db.cursor()
        self.cur.execute("SELECT EAN FROM product")
        rows = self.cur.fetchall()
        # 把数据库返回的元组结果转换成EAN列表
        self.EAN = [row[0] for row in rows]
        # 关闭数据库资源,避免泄漏
        self.cur.close()
        self.db.close()

    def start_requests(self):
        # ------------------- 这里就是你要的for循环 -------------------
        for ean in self.EAN:
            # 替换成你实际要爬取的商品页面URL,把EAN作为参数/路径传入
            target_url = f"https://your-target-site.com/product/{ean}"
            # 发起爬取请求,指定解析回调函数,同时传递EAN到回调中
            yield scrapy.Request(
                url=target_url,
                callback=self.parse_product,
                meta={'current_ean': ean}
            )

    def parse_product(self, response):
        # 这里写你的页面解析逻辑,比如提取商品名称、价格等信息
        current_ean = response.meta.get('current_ean')
        product_name = response.css('h1.product-title::text').get(default='').strip()
        product_price = response.css('span.price::text').get(default='').strip()

        # 输出或保存解析结果
        yield {
            'EAN': current_ean,
            'product_name': product_name,
            'product_price': product_price
            # 其他需要提取的字段...
        }

关键说明

  1. 数据库连接优化:把数据库连接逻辑移到__init__方法里,比直接在类级别定义更合理,避免爬虫实例化时出现重复连接的问题。
  2. 循环的正确位置:start_requests()是Scrapy爬虫生成初始请求的官方入口,在这里遍历EAN数组,逐个生成爬取请求,完全符合Scrapy的运行逻辑。
  3. 传递EAN到回调:通过meta参数把当前遍历的EAN传递给解析函数parse_product,这样可以确保解析出的商品信息和对应的EAN一一对应。

内容的提问来源于stack exchange,提问作者Rousblack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:38:20