为了账号安全,请及时绑定邮箱和手机立即绑定

使用 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 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信