[英]Can't scrape information from a static webpage using requests module
我正在嘗試使用 requests 模塊從網頁中獲取product title
及其description
。 標題和描述似乎是靜態的,因為它們都存在於頁面源代碼中。 但是,我未能通過以下嘗試抓住它們。 腳本此時拋出AttributeError
。
import requests
from bs4 import BeautifulSoup
link = 'https://www.nordstrom.com/s/anine-bing-womens-plaid-shirt/6638030'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
}
with requests.Session() as s:
s.headers.update(headers)
res = s.get(link)
soup = BeautifulSoup(res.text,"lxml")
product_title = soup.select_one("h1[itemProp='name']").text
product_desc = soup.select_one("#product-page-selling-statement").text
print(product_title,product_desc)
如何使用請求模塊從上面的頁面中抓取標題和描述?
頁面是動態的。 從 api 源獲取數據:
import requests
import pandas as pd
api = 'https://www.nordstrom.com/api/ng-looks/styleId/6638030?customerId=f36cf526cfe94a72bfb710e5e155f9ba&limit=7'
jsonData = requests.get(api).json()
df = pd.json_normalize(jsonData['products'].values())
print(df.iloc[0])
輸出:
id 6638030-400
name ANINE BING Women's Plaid Shirt
styleId 6638030
styleNumber
colorCode 400
colorName BLUE
brandLabelName ANINE BING
hasFlatShot True
imageUrl https://n.nordstrommedia.com/id/sr3/6d000f40-8...
price $149.00
pathAlias anine-bing-womens-plaid-shirt/6638030?origin=c...
originalPrice $149.00
productTypeLvl1 12
productTypeLvl2 216
isUmap False
Name: 0, dtype: object
當測試像這樣的請求時,你應該輸出響應來看看你得到了什么。 最好使用 Postman 之類的東西(我認為 VSCode 現在有類似的功能)來設置 URL、標頭、方法和參數,並且還可以查看帶有標頭的完整響應。 當一切正常時,只需將其轉換為 python 代碼。 Postman 甚至有一些通用語言的“導出到代碼”功能。
無論如何...
從 python 和瀏覽器完成的請求是一回事。 如果標頭、URL 和參數相同,它們應該收到相同的響應。 所以下一步就是比較你的請求和瀏覽器完成的請求的區別:
因此瀏覽器包含的一個或多個標頭從服務器獲得了良好的響應,但僅使用User-Agent
是不夠的。
我會嘗試確定哪些標頭,但不幸的是,Nordstrom 檢測到一些“異常活動”並且似乎阻止了我的 IP :( 可能是由於發送了明顯的手工請求。 我認為這是我的 IP 被阻止了,因為我無法從任何瀏覽器訪問該站點,即使在清除我的緩存之后也是如此。
因此,請仔細檢查您在使用刮刀時是否沒有發生同樣的情況。
祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.