python - 无法从网页解析不同的产品链接
问题描述
我在 Python 中创建了一个脚本来从网页中获取不同的产品链接。虽然我知道该网站的内容是动态的,但我尝试了常规方式让您告知我尝试过。我在开发工具中寻找 API,但找不到。没有任何方法可以使用请求获取这些链接吗?
到目前为止,我已经写过:
import requests
from bs4 import BeautifulSoup
link = "https://www.amazon.com/stores/node/10699640011"
def fetch_product_links(url):
res = requests.get(url,headers={"User-Agent":"Mozilla/5.0"})
soup = BeautifulSoup(res.text,"lxml")
for item_link in soup.select("[id^='ProductGrid-'] li[class^='style__itemOuter__'] > a"):
print(item_link.get("href"))
if __name__ == '__main__':
fetch_product_links(link)
如何使用请求从该站点获取不同的产品链接?
解决方案
我认为您只需要可以从您可以在网络选项卡中看到的另一个 url 构造收集的 asins,即您可以显着缩短最终 url。但是,您确实需要向原始 url 发出请求,以获取要在第二个 url 中使用的标识符。返回 146 个链接。
import requests, re, json
node = '10699640011'
with requests.Session() as s:
r = s.get(f'https://www.amazon.com/stores/node/{node}')
p = re.compile(r'var slotsStr = "\[(.*?,){3} share\]";')
identifier = p.findall(r.text)[0]
identifier = identifier.strip()[:-1]
r = s.get(f'https://www.amazon.com/stores/slot/{identifier}?node={node}')
p = re.compile(r'var config = (.*?);')
data = json.loads(p.findall(r.text)[0])
asins = data['content']['ASINList']
links = [f'https://www.amazon.com/dp/{asin}' for asin in asins]
print(links)
编辑:
有两个给定节点:
import requests, re, json
from bs4 import BeautifulSoup as bs
nodes = ['3039806011','10699640011']
with requests.Session() as s:
for node in nodes:
r = s.get(f'https://www.amazon.com/stores/node/{node}')
soup = bs(r.content, 'lxml')
identifier = soup.select('.stores-widget-btf:not([id=share],[id*=RECOMMENDATION])')[-1]['id']
r = s.get(f'https://www.amazon.com/stores/slot/{identifier}?node={node}')
p = re.compile(r'var config = (.*?);')
data = json.loads(p.findall(r.text)[0])
asins = data['content']['ASINList']
links = [f'https://www.amazon.com/dp/{asin}' for asin in asins]
print(links)
推荐阅读
- c - 将数组细分为较小的数组到较小的数组不会返回正确的结果
- python - 从网站上抓取表格:无法寻址正确的表格
- java - Android Studio SQLite 无法打开数据库错误
- tibco - 通过代理 REST API 获取 appnode 日志跟踪
- android - 如何找出我的应用程序中 UI 变慢的原因?
- java - 如何使用 JSON 在 Android 中保存 ArrayList、自定义适配器(及其数据)?
- shopify - 如何与液体并行迭代两个数组
- android - 如何确保碎片不被破坏?
- python - Pandas 中的熵返回“-inf”(无穷大)
- angular - markForCheck 对大型组件树的性能不利吗?