【问题标题】:Get product main and sub categories获取产品主分类和子分类
【发布时间】:2020-12-18 09:14:50
【问题描述】:

我正在使用 scrapy python 创建一个数据抓取工具。我使用此命令获取类别,但它只显示一个类别

链接:https://royalprint.pk/product/name-print-superhero-sweatshirt-011/

In [6]: response.css('span.posted_in a::text').get() 
Out[6]: 'Name Print Sweatshirt'

这是控制台预览

我想要在单独的 excel .csv 列中的所有主类别和子类别

请帮忙。

问候

【问题讨论】:

  • 请将整个代码贴出来(以便于重现)
  • 我之前没用过scrapy,只有漂亮的汤。你试过用 getall() 代替 get() 吗?
  • 先生,我已经发布了shell代码
  • @HjSin,通过使用 getall 我得到这个 In [7]: response.css('span.posted_in a::text').getall() Out[7]: ['Name Print Sweatshirt ', '运动衫'] 但是是否可以先获得产品主类别,然后再获得子类别?因为 woocommerce 有 Main Category > Sub category > Sub Sub Category
  • 只是一些提示:考虑将您的 css 选择器转换为 xpath,因为scrapy 会自动执行此操作,这样做时您将获得性能 + 可以灵活地上下遍历(关键字:兄弟姐妹、祖先、后代)。在这里您可以找到有关 Xpath 的帮助:css-selector-to-xpath.appspot.com

标签: python python-3.x web-scraping scrapy


【解决方案1】:

使用 Scrapy Shell,我生成了一个带有 scrapy genspider overflow <start_url> 的简单蜘蛛。

您可以使用scrapy runspider overflow.py 运行蜘蛛

import scrapy


class OverflowSpider(scrapy.Spider):
    name = 'overflow'
    allowed_domains = ['royalprint.pk']
    start_urls = ['https://royalprint.pk/product/name-print-superhero-sweatshirt-011/']

def parse(self, response):
    categories=response.xpath("//span[@class='posted_in']/a/text()").getall()
    for category in categories:
        print(category)

它打印你需要的东西。

如果你想保存它,你可以产生一个字典(而不是 for 循环):

yield dict.fromkeys(categories , ' ')

并定义一个输出文件,当您像这样进行 CLI 调用时:-o myOutput.csv

【讨论】:

  • @HannahJames 刚刚看到,我想念你想要在列中输出。这将在列中输出类别,但在第二行中,第一行是升序数字。我猜你想要第一行的类别,每列一个?
猜你喜欢
  • 2017-08-09
  • 2014-09-10
  • 2015-12-05
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多