亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 BS4 // 訪問類抓取網站

使用 BS4 // 訪問類抓取網站

哈士奇WWW 2024-01-16 15:34:34
我嘗試使用 BeautifulSoup 從網站中提取不同的信息,例如產品標題和價格。我使用不同的 url 來執行此操作,并使用for...in.... 在這里,我將只提供一個沒有循環的片段。from bs4 import BeautifulSoupimport requestsimport csvurl= 'https://www.mediamarkt.ch/fr/product/_lg-oled65gx6la-1991479.html'html_content = requests.get(url).textsoup = BeautifulSoup(html_content, "lxml")price = soup.find('meta', property="product:price:amount")title = soup.find("div", {"class": "flix-model-name"})title2 = soup.find('div', class_="flix-model-name")title3 = soup.find("div", attrs={"class": "flix-model-name"})print(price['content'])print(title)print(title2)print(title3)因此,從這個 URL https://www.mediamarkt.ch/fr/product/_lg-oled65gx6la-1991479.html我并沒有提取產品編號。我找到它的唯一地方是在 div 中class="flix-model-name"。然而,我完全無法達到它。我嘗試了不同的方法來訪問它title,title2但title3我總是有輸出none。我是一個初學者,所以我想我可能錯過了一些基本的東西......如果是這樣,請原諒我。歡迎任何幫助!提前謝謝了!僅供參考,我想在每個 url 中附加數據并將其寫入 CSV 文件,如下所示:for url in urls:    html_content = requests.get(url).text    soup = BeautifulSoup(html_content, "lxml")    row=[]    try:        # title = YOUR VERY WELCOMED ANSWER        prices = soup.find('meta', property="product:price:amount")        row = (title.text+','+prices['content']+'\n')        data.append(row)    except:        passfile = open('database.csv','w')i = 0while i < (len(data)):    file.write(data[i])    i +=1file.close()
查看完整描述

1 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

使用 python 嘗試以下方法 -請求簡單、直接、可靠、快速,并且在請求時需要更少的代碼。在檢查了 google chrome 瀏覽器的網絡部分后,我從網站本身獲取了 API URL。

下面的腳本到底在做什么:

首先,它將獲取 API URL,根據 2 個動態參數(產品和類別)創建 URL,然后執行 GET 請求來獲取數據。

獲取數據后腳本將使用 json.loads 庫解析 JSON 數據。最后,它將一一迭代所有產品列表,并打印分為 2 個類別“?box1_ProductToProduct?”和“?box2_KategorieTopseller?”的詳細信息,如品牌、名稱、產品編號和單價。同樣,您可以通過查看 API 調用來添加更多詳細信息。

import json

import requests

from urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)


def scrap_product_details():

PRODUCT = 'MMCH1991479' #Product number

CATEGORY = '680942' #Category number

URL = 'https://www.mediamarkt.ch/rde_server/res/MMCH/recomm/product_detail/sid/WACXyEbIf3khlu6FcHlh1B1?product=' + PRODUCT + '&category=' + CATEGORY? # dynamic URL

response = requests.get(URL,verify = False) #GET request to fetch the data

result = json.loads(response.text) # Parse JSON data using json.loads

box1_ProductToProduct = result[0]['box1_ProductToProduct'] # Extracted data from API

box2_KategorieTopseller = result[1]['box2_KategorieTopseller']


for item in box1_ProductToProduct: # loop over extracted data

? ? print('-' * 100)

? ? print('Brand : ',item['brand'])

? ? print('Name : ',item['name'])

? ? print('Net Unit Price : ',item['netUnitPrice'])

? ? print('Product Number : ',item['product_nr'])

? ? print('-' * 100)


for item in box2_KategorieTopseller:? # loop over extracted data

? ? print('-' * 100)

? ? print('Brand : ',item['brand'])

? ? print('Name : ',item['name'])

? ? print('Net Unit Price : ',item['netUnitPrice'])

? ? print('Product Number : ',item['product_nr'])

? ? print('-' * 100)


scrap_product_details()


查看完整回答
反對 回復 2024-01-16
  • 1 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號