簡體   English   中英

無法使用請求模塊解析網頁中的兩個字段

[英]Unable to parse two fields from a webpage using requests module

我正在嘗試使用請求模塊從此網頁中抓取兩個字段product_titleitem_code 當我執行下面的腳本時,我總是得到AttributeError代替結果,因為我所追求的數據不在頁面源中。

但是,我在這里遇到了幾種解決方案,即使數據不在頁面源中,它們也能夠從 javascript 加密站點獲取數據,所以我想應該有任何方法可以使用請求從網頁中獲取這兩個字段。

import requests
from bs4 import BeautifulSoup

link = 'https://www.sainsburys.co.uk/gol-ui/Product/persil-small---mighty-non-bio-laundry-liquid-21l-60-washes'

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
    res = s.get(link)
    soup = BeautifulSoup(res.text,"lxml")
    product_title = soup.select_one("h1[data-test-id='pd-product-title']").get_text(strip=True)
    item_code = soup.select_one("span#productSKU").get_text(strip=True)
    print(product_title,item_code)

預期輸出:

Persil Non-Bio Laundry Liquid 1.43L
Item code: 7637944

如何使用請求從該站點獲取兩個字段?

其實是wesite調用apis,所以你可以直接使用它來獲取數據

r = requests.get('https://www.sainsburys.co.uk/groceries-api/gol-services/product/v1/product?filter[product_seo_url]=gb%2Fgroceries%2Fpersil-small---mighty-non-bio-laundry-liquid-21l-60-washes&include[ASSOCIATIONS]=true&include[PRODUCT_AD]=citrus')
products = r.json()['products']

for each_product in products:
    print(f"Item code: {each_product['product_uid']}")
    print(each_product['name'])
    
    
# Item code: 7637944
# Persil Non-Bio Laundry Liquid 1.43L

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM