无法从网页中解析出不同产品的链接

3
我已经用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)

如何使用requests从该网站获取不同的产品链接?
1个回答

4

我认为你只需要从另一个URL构造中收集asin,可以在网络选项卡中看到,即可以显着缩短最终的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)

1
非常棒的@QHarr。感谢你无数次。 - robots.txt
希望它可以跨链接工作。第一个正则表达式可以改进。 - QHarr
1
今天稍晚些我会看一下,可以吗? - QHarr
我的头都晕了,要从你解析asin的地方获取价格@QHarr。问题是目标页面“https://www.amazon.com/dp/B01DOLQ0BY”不包含价格,所以我需要从其落地页面“https://www.amazon.com/stores/node/10699640011”中解析价格。 - robots.txt
非常抱歉我在这件事上给你带来了很大的压力。非常感谢你的关心。 - robots.txt
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接