将Scrapy请求URL添加到解析数组中

1 投票
1 回答
944 浏览
提问于 2025-04-18 04:08

我正在使用下面的Scrapy代码,这段代码可以正常工作,用来从一个网站上抓取数据。这个抓取程序会输入一个产品ID的文本列表,然后在第10行生成一个网址。我想知道怎么把当前的start_url作为一个额外的元素添加到我的项目数组中?

from scrapy.spider import Spider
from scrapy.selector import Selector
from site_scraper.items import SiteScraperItem

class MySpider(Spider):
    name = "product"
    allowed_domains = ["site.com"]
    url_list = open("productIDs.txt")
    base_url = "http://www.site.com/p/"
    start_urls = [base_url + url.strip() for url in url_list.readlines()]
    url_list.close()

def parse(self, response):
    hxs = Selector(response)
    titles = hxs.xpath("//span[@itemprop='name']")
    items = []
    item = SiteScraperItem()
    item ["Classification"] = titles.xpath("//div[@class='productSoldMessage']/text()").extract()[1:]
    item ["Price"] = titles.xpath("//span[@class='pReg']/text()").extract()
    item ["Name"] = titles.xpath("//span[@itemprop='name']/text()").extract()
    try:
        titles.xpath("//link[@itemprop='availability']/@href").extract()[0] == 'http://schema.org/InStock'
        item ["Availability"] = 'In Stock'
    except:
        item ["Availability"] = 'Out of Stock'
    if len(item ["Name"]) == 0:
        item ["OnlineStatus"] = 'Offline'
        item ["Availability"] = ''
    else:
        item ["OnlineStatus"] = 'Online'
    items.append(item)
    return items

我使用下面的命令行代码将这些数据导出为CSV文件,并希望网址能作为CSV文件中的一个额外值。

scrapy crawl product -o items.csv -t csv

提前感谢你的帮助!

1 个回答

3

在你的 SiteScraperItem 类里添加一个新的 Field,然后在 parse() 方法中把它设置为 response.url

撰写回答