网页抓取 - 从Lazada电商平台提取URL

2024-10-06 06:45:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正试图从拉扎达电子商务平台刮产品的网址,但我得到的是从网站的随机链接,而不是产品链接。在

https://www.lazada.com.my/oldtown-white-coffee/?langFlag=en&q=All-Products&from=wangpu&pageTypeId=2

我的代码如下:

from bs4 import BeautifulSoup, SoupStrainer
import requests

url = "https://www.lazada.com.my/oldtown-white-coffee/?langFlag=en&q=All- 
       Products&from=wangpu&pageTypeId=2"

page = requests.get(url)    
data = page.text
soup = BeautifulSoup(data)


links = soup.find_all('div', {'class': 'c16H9d'})

for link in soup.find_all("a"):
    print(link.get("href"))

我从这个代码中得到的结果(这不是我想要的):

enter image description here

这是我需要的链接部分,我想从产品页面列出所有产品的网址。在

enter image description here

我希望你们能在这方面帮我,我知道这很简单,只是似乎不起作用,从昨天开始就在看这个。在


Tags: fromhttpscom产品链接mywwwen
1条回答
网友
1楼 · 发布于 2024-10-06 06:45:46

页面是动态的。在html源代码中是生成产品json格式的脚本。您可以提取它,然后解析json对象以打印出url:

from bs4 import BeautifulSoup, SoupStrainer
import requests
import json

url = "https://www.lazada.com.my/oldtown-white-coffee/?langFlag=en&q=All-Products&from=wangpu&pageTypeId=2"

page = requests.get(url)    
data = page.text
soup = BeautifulSoup(data)


scripts = soup.find_all('script')

jsonObj = None
for script in scripts:
    if 'window.pageData=' in script.text:
        jsonStr = script.text

        jsonStr = jsonStr.split("window.pageData=")[1]
        jsonObj = json.loads(jsonStr)


products = jsonObj['mods']['listItems']

for item in products:
    print (item['productUrl'])

输出:

^{pr2}$

相关问题 更多 >