我正在尝试抓取沃尔玛上的搜索结果。
例如,让我们进入域“https://www.walmart.com/search/?query=coffee%20machine”
并尝试从类名为
search-product-result
的元素中提取文本,全部用 python 编写。
我已尝试
selenium
,但系统要求我验证我的身份。我尝试过 requests
,但我从沃尔玛得到了禁止页面。我尝试过其他库,但我已经没有想法了。有什么建议吗?
此 URL 中的数据正在由 JavaScript 加载。所以
beautifulsoup
在这种情况下不起作用。
但是,页面显示的数据以 JSON 字符串形式存在于
<script>
标签内,其 HTML 代码中带有 id=searchContent
。
我已经从 HTML 代码中提取了
<script>
,进行了一些剥离并将文本转换为 JSON。您可以从该 JSON 中提取您需要的任何数据。
这是打印搜索结果的产品 ID 的代码。
from bs4 import BeautifulSoup
import requests
import json
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"}
url = 'https://www.walmart.com/search?query=coffee%20machine'
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
s = str(soup.find('script', {'id': 'searchContent'}))
s = s.strip('<script id="searchContent" type="application/json"></script>')
j = json.loads(s)
x = j['searchContent']['preso']['items']
for i in x:
print(i['productId'])
输出产品 ID。
2RYLQXVZ80E8
7EYUEQ82RMBP
7A3VDQNS5R36
22GRP3PGSY4A
238DLP3R0M3W
52NMIX2M8SC5
1R4H630LRNSE
.
.
.
如果您在尝试从 Walmart 抓取搜索结果时被阻止并且需要数据来工作,我构建了 Walmart Search API,只需通过 API 调用即可获取任何查询的搜索结果中的产品数据。您可以点击链接查看文档。有一个包含 100 个请求的免费套餐。