使用 BS4 // 访问类抓取网站

我尝试使用 BeautifulSoup 从网站中提取不同的信息,例如产品标题和价格。


我使用不同的 url 来执行此操作,并使用for...in.... 在这里,我将只提供一个没有循环的片段。


from bs4 import BeautifulSoup

import requests

import csv


url= 'https://www.mediamarkt.ch/fr/product/_lg-oled65gx6la-1991479.html'


html_content = requests.get(url).text

soup = 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"。然而,我完全无法达到它。我尝试了不同的方法来访问它titletitle2title3我总是有输出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:

        pass


file = open('database.csv','w')

i = 0

while i < (len(data)):

    file.write(data[i])

    i +=1

file.close()


哈士奇WWW
浏览 38回答 1
1回答

慕妹3242003

使用 python 尝试以下方法 -请求简单、直接、可靠、快速,并且在请求时需要更少的代码。在检查了 google chrome 浏览器的网络部分后,我从网站本身获取了 API URL。下面的脚本到底在做什么:首先,它将获取 API URL,根据 2 个动态参数(产品和类别)创建 URL,然后执行 GET 请求来获取数据。获取数据后脚本将使用 json.loads 库解析 JSON 数据。最后,它将一一迭代所有产品列表,并打印分为 2 个类别“ box1_ProductToProduct ”和“ box2_KategorieTopseller ”的详细信息,如品牌、名称、产品编号和单价。同样,您可以通过查看 API 调用来添加更多详细信息。import jsonimport requestsfrom urllib3.exceptions import InsecureRequestWarningrequests.packages.urllib3.disable_warnings(InsecureRequestWarning)def scrap_product_details():PRODUCT = 'MMCH1991479' #Product numberCATEGORY = '680942' #Category numberURL = 'https://www.mediamarkt.ch/rde_server/res/MMCH/recomm/product_detail/sid/WACXyEbIf3khlu6FcHlh1B1?product=' + PRODUCT + '&category=' + CATEGORY  # dynamic URLresponse = requests.get(URL,verify = False) #GET request to fetch the dataresult = json.loads(response.text) # Parse JSON data using json.loadsbox1_ProductToProduct = result[0]['box1_ProductToProduct'] # Extracted data from APIbox2_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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python