首页 > 解决方案 > 为什么我不能通过 BeautifulSoup 抓取亚马逊产品?

问题描述

我正在尝试抓取此亚马逊列表的标题。我编写的代码适用于其他一些亚马逊列表,但不适用于下面代码中提到的 url。

这是我尝试过的python代码:

 import requests
from bs4 import BeautifulSoup
url="https://www.amazon.in/BULLMER-Cotton-Printed-T-shirt-Multicolour/dp/B0892SZX7F/ref=sr_1_4?c=ts&dchild=1&keywords=Men%27s+T-Shirts&pf_rd_i=1968024031&pf_rd_m=A1VBAL9TL5WCBF&pf_rd_p=8b97601b-3643-402d-866f-95cc6c9f08d4&pf_rd_r=EPY70Y57HP1220DK033Y&pf_rd_s=merchandised-search-6&qid=1596817115&refinements=p_72%3A1318477031&s=apparel&sr=1-4&ts_id=1968123031"
headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0"}

page = requests.get(url, headers=headers)
print(page.status_code)
soup = BeautifulSoup(page.content, "html.parser")
#print(soup.prettify()) 
title = soup.find(id = "productTitle")
if title:
    title = title.get_text()
else:
    title = "default_title"
print(title)

输出:

200
default_title

来自检查器工具的 html 代码:

<span id="productTitle" class="a-size-large product-title-word-break">
BULLMER Mens Halfsleeve Round Neck Printed Cotton Tshirt - Combo Tshirt - Pack of 3
</span> 

标签: pythonweb-scrapingbeautifulsoup

解决方案


首先,正如其他人所评论的,使用代理服务。其次,如果你有一个 asin 就可以进入亚马逊产品页面。

亚马逊对所有产品页面都遵循此 url 模式。

https://www.amazon.(com/in/fr)/dp/<asin>
import requests
from bs4 import BeautifulSoup
url="https://www.amazon.in/dp/B0892SZX7F"
headers = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'}

page = requests.get(url, headers=headers)
print(page.status_code)
soup = BeautifulSoup(page.content, "html.parser")
 
title = soup.find("span", {"id":"productTitle"})
if title:
    title = title.get_text(strip=True)
else:
    title = "default_title"

print(title)

输出:

200
BULLMER Mens Halfsleeve Round Neck Printed Cotton Tshirt - Combo Tshirt - Pack of 3

推荐阅读