Beautiful Soup 与亚马逊有问题,它

Posted

技术标签:

【中文标题】Beautiful Soup 与亚马逊有问题,它【英文标题】:Beautiful Soup has problems with amazon,it 【发布时间】:2020-12-04 09:04:26 【问题描述】:

我正在尝试从亚马逊页面获取名称和奖品,这是代码:

import requests
from bs4 import BeautifulSoup

URL = "https://www.amazon.it/Nuovo-Apple-iPhone-SE-64GB/dp/B087616RMM/ref=sr_1_1_sspa?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=iphone&qid=1597409499&s=electronics&sr=1-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUExNElPQVhUUTFTOTFOJmVuY3J5cHRlZElkPUEwMTA3ODI0M1RZVTc2MTdRM1A3SiZlbmNyeXB0ZWRBZElkPUEwODI4MDExMTdYMlhUOFlUTVY0TCZ3aWRnZXROYW1lPXNwX2F0ZiZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU="

URL2 = "https://www.amazon.it/intermittenze-della-morte-Jos%C3%A9-Saramago-ebook/dp/B019KBH3CC/ref=sr_1_1?__mk_it_IT=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=saramago&qid=1597410061&sr=8-1"

headers = "User-Agent": 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0'



page = requests.get(URL2, headers=headers)
soup = BeautifulSoup(page.content, 'lxml')

title = soup.find(id='productTitle').get_text().strip()
price = soup.find(id='priceblock_ourprice').get_text().strip()

print(title)
print(price)

问题是使用 URL 时它可以工作,但使用 URL2 时它不起作用。 我该如何解决? 谢谢:)

【问题讨论】:

【参考方案1】:

在获取文本之前,您必须检查是否找到所需的元素,如果是,您可以提取文本:

title = soup.find(id='productTitle')
if title:
    title = title.get_text().strip()

price = soup.find(id='priceblock_ourprice')
if price:
    price = price.get_text().strip()

请注意亚马逊有几种不同的页面布局,所以如果你想制作通用爬虫,你必须涵盖所有这些

【讨论】:

谢谢。我怎样才能找到所有不同的布局? 它的逻辑)所以你可以检查你的脚本的结果,如果你得到None,那么布局可能不同(我看到至少4种不同的布局)。

以上是关于Beautiful Soup 与亚马逊有问题,它的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Beautiful Soup 刮掉href中的文本?

用Beautiful Soup解析html源码

Beautiful Soup 4 CSS 选择器的工作方式与教程显示的方式不同

Python 爬虫 解析库的使用 --- Beautiful Soup

4.2 使用 Beautiful Soup

python标准库Beautiful Soup与MongoDb爬喜马拉雅电台的总结