【问题标题】:how to extract asin from an amazon product page如何从亚马逊产品页面中提取 asin
【发布时间】:2015-11-10 08:24:46
【问题描述】:

我有以下网页Product page,我正在尝试从中获取 ASIN(在本例中为 ASIN=B014MHZ90M),但我不知道如何从该页面获取它。

我正在使用 Python 3.4、Scrapy 和以下代码:

hxs = Selector(response)
product_name = "".join(hxs.xpath('//span[contains(@class,"a-text-ellipsis")]/a/text()').extract())
product_model = hxs.xpath('//body//div[@id="buybox_feature_div"]//form[@method="post"]/input[@id="ASIN"/text()').extract()

这样我没有得到必填字段(ASIN 号)。
1. 我应该怎么做才能获得产品型号(ASIN)?

2.有没有办法调试这样的代码(我正在使用 PyCharm)。我无法使用调试器,只能运行它而没有看到“慢动作”中发生了什么。

提前感谢大家。

【问题讨论】:

    标签: python python-3.x web-crawler scrapy amazon


    【解决方案1】:

    您可以从 response.url 中提取 B014MHZ90M

    response.url.split("/dp/")[1]
    

    response.url.split("/dp/")[1] = B014MHZ90M

    response.url.split("/dp/")[0] = http://www.amazon.com

    【讨论】:

    • 我认为 URL 中的 product_id 可能与 ASIN 不同。例如:- 在链接中 - amazon.com/dp/B00GSSVVV0?th=1,dp/ 后面的一个是产品 ID,您可以通过转到页面并查看产品描述来找到 ASIN。请澄清。
    【解决方案2】:

    查看您链接的亚马逊页面,ASIN 编号出现在“产品详情”部分。使用scrapy shell 如下xpath

    response.xpath('//li[contains(.,"ASIN: ")]//text()').extract()
    

    返回

    [u'ASIN: ', u'B014MHZ90M']
    

    为了调试 XPATH,我总是使用 scrapy shell 和用于 Firefox 的 Firebug。

    【讨论】:

    • 感谢您的回答,但它仍然没有返回 ASIN。我打印了 (resoponse.url) 并获得了以下链接:response.url。如何从该页面提取 ASIN?
    • @LiorMagen 你做了什么来得到你在你的评论中的 response.url 中提供的链接?我的 xpath 生成一个列表,其第二个元素是您所说的要查找的值。您在scrapy shell 中尝试过吗?
    • 我为产品页面创建了一个解析器,在产品页面中我使用了你的代码,它现在就像一个魅力。谢谢史蒂夫。
    • @LiorMagen 愿意分享吗?
    • @AviParshan 嗨,对不起,那是很久以前的事了,我真的不记得了。
    【解决方案3】:

    我用这个:

    re.match("http[s]?://www.amazon.(\w+)(.*)/(dp|gp/product)/(?P<asin>\w+).*", url, flags=re.IGNORECASE)
    

    【讨论】:

      【解决方案4】:

      您可以从网址中获取。

      r = re.search('www.amazon.com/dp/(.+)/', response.url)
      print r.group(1)
      

      【讨论】:

      • 产品 url 有时以“/gp/product/”而不是“/dp/”开头。也可以在亚马逊域名后添加产品网址。
      【解决方案5】:

      https://www.amazon.com/gp/seller/asin-upc-isbn-info.html

      亚马逊标准识别码 (ASIN) 是由 10 个组成的唯一块 标识项目的字母和/或数字。

      您最好的选择也可能是最简单的选择是在 URL 上运行一个正则表达式,在两个“/”之间寻找一个 10 个字符的字符串。

      '/\w{10}/'
      

      然后您可以简单地从结果中省略“/”。

      【讨论】:

        猜你喜欢
        • 2022-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-19
        • 1970-01-01
        • 2018-12-02
        • 2013-02-10
        • 1970-01-01
        相关资源
        最近更新 更多