Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用BS4//访问类抓取网站_Python_Web Scraping_Beautifulsoup - Fatal编程技术网

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

Python 用BS4//访问类抓取网站,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我试图从BeautifulSoup网站上提取不同的信息,例如产品名称和价格 我使用不同的URL来实现这一点,在URL中循环使用for…in…。在这里,我只提供一个没有循环的片段 从bs4导入美化组 导入请求 导入csv url='1〕https://www.mediamarkt.ch/fr/product/_lg-oled65gx6la-1991479.html' html\u content=requests.get(url).text 汤=美汤(html_内容,“lxml”) price=s

我试图从BeautifulSoup网站上提取不同的信息,例如产品名称和价格

我使用不同的URL来实现这一点,在URL中循环使用
for…in…
。在这里,我只提供一个没有循环的片段

从bs4导入美化组
导入请求
导入csv
url='1〕https://www.mediamarkt.ch/fr/product/_lg-oled65gx6la-1991479.html'
html\u content=requests.get(url).text
汤=美汤(html_内容,“lxml”)
price=soup.find('meta',property=“产品:价格:金额”)
title=soup.find(“div”,“class”:“flix model name”})
title2=soup.find('div',class=“flix模型名”)
title3=soup.find(“div”,attrs={“class”:“flix model name”})
打印(价格['content'])
印刷品(标题)
印刷品(标题2)
印刷品(标题3)
因此,从这个URL中,我不想提取产品编号。我找到它的唯一地方是div
class=“flix model name”
。然而,我完全无法达到它。我在
标题
标题2
标题3
中尝试了不同的方法来访问它,但我总是有
的输出

我是一个初学者,所以我想我可能错过了一些基本的东西。。。如果是这样,请原谅我

欢迎任何帮助!非常感谢

仅供参考,对于每个url,我都想添加数据并将其写入CSV文件,如下所示:

对于url中的url:
html\u content=requests.get(url).text
汤=美汤(html_内容,“lxml”)
行=[]
尝试:
#title=您非常欢迎的答案
价格=汤。查找('meta',property=“产品:价格:金额”)
行=(title.text+,'+prices['content']+'\n')
data.append(行)
除:
通过
文件=打开('database.csv','w')
i=0
而我<(len(data)):
file.write(数据[i])
i+=1
file.close()文件
非常感谢您的帮助


David

使用python尝试下面的方法-在处理请求时,需要简单、直接、可靠、快速和更少的代码。我在检查了谷歌chrome浏览器的网络部分后,从网站本身获取了API URL

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

首先,它将获取API URL,基于2个动态参数(产品和类别)创建URL,然后执行GET请求以获取数据

获取数据后,脚本将使用JSON.loads库解析JSON数据。 最后,它将逐一迭代所有产品列表,并打印分为两类的详细信息,如品牌、名称、产品编号和单价。同样,您可以通过查看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()

我相信您正在寻找的内容是在主文档加载后由JavaScript代码(即AJAX)加载的,这就是为什么您在下载的页面中找不到您正在寻找的元素。我相信您需要使用诸如Selenium之类的工具来驱动浏览器并从中获取内容,或者使用浏览器检查器分析加载页面后发出的JavaScript获取请求,以确定您需要请求的URL。哇,这太令人印象深刻了。我有点理解这些步骤,但我无法对其进行太多修改。据我所知,这部剧本采用了所有标有“TopSeller”标签的电视。有没有办法从网站上截取所有的电视?再次感谢你的帮助!在这种情况下,你必须首先检查所有电视节目的URL,然后再试一次。如果这对你有效,请接受我的回答并投票,这有助于激发我的积极性。谢谢。好的,我试试这个。非常感谢你的帮助!