python - 为什么我不能通过 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>
解决方案
首先,正如其他人所评论的,使用代理服务。其次,如果你有一个 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
推荐阅读
- python - numpy二项式随机数效率低吗?
- c# - 如何在屏幕上显示分数?
- sql-server - T-SQL:如何将所有全文索引包括新列?
- javascript - 将 json 转换为 javascript 对象
- java - Elasticsearch Java API 7.0 Bulk Insert 尝试基本示例,抛出错误
- python - 如何通过 vmware SDK (pyvmomi) 获取 vm 集群名称
- php - 嵌套条件 if 和 else if 命令
- python - Kernprof(line_profiler):如何将结果输出为文本而不是二进制文件
- sql - 这个数据库模型效率低吗?
- bootstrap-4 - 即使调用了所有必需的文件,Bootstrap 也无法工作