Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.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
使用python3进行网页抓取_Python_Python 3.x_Web Scraping_Beautifulsoup - Fatal编程技术网

使用python3进行网页抓取

使用python3进行网页抓取,python,python-3.x,web-scraping,beautifulsoup,Python,Python 3.x,Web Scraping,Beautifulsoup,我想了解一些关于亚马逊的信息。Idk为什么我的代码不工作。每次我尝试测试这些行时,都会得到一个无输出。 我正在使用VisualStudio import requests from bs4 import BeautifulSoup page = requests.get("https://www.amazon.it/Xiaomi-frequenza-Monitoraggio-Bracciale-Smartwatch/dp/B07T9DHKXL?pf_rd_r=F2MMPNCJR5AQ4KP5C8

我想了解一些关于亚马逊的信息。Idk为什么我的代码不工作。每次我尝试测试这些行时,都会得到一个无输出。 我正在使用VisualStudio

import requests
from bs4 import BeautifulSoup
page = requests.get("https://www.amazon.it/Xiaomi-frequenza-Monitoraggio-Bracciale-Smartwatch/dp/B07T9DHKXL?pf_rd_r=F2MMPNCJR5AQ4KP5C82P&pf_rd_p=ff59f7ef-650d-5e5a-9ee5-6fd80bb0e21d&pd_rd_r=12e6add2-54cd-44b1-bfa4-81c70ad68010&pd_rd_w=Lo5MD&pd_rd_wg=t2rFz&ref_=pd_gw_ri"
)
soup = BeautifulSoup(page.content,'html.parser')
title = soup.find(id='productTitle')
price = soup.find(id='priceblock_ourprice')
print(title)
print(price)

包括Amazon在内的大多数现代网站都使用javascript动态加载网页。使用
requests.get
发送请求时,您只获得网页的初始呈现,而没有动态加载的内容。您可以使用像selenium这样的库来加载动态加载的网页,然后将页面源解析为Beauty soup。

有两个问题:

1.)使用HTTP头
用户代理
。没有它,亚马逊会给你发送验证码页面

2.)作为解析器,选择
html5lib
lxml
html.parser
解析此页面时出现问题

import requests
from bs4 import BeautifulSoup

url = 'https://www.amazon.it/Xiaomi-frequenza-Monitoraggio-Bracciale-Smartwatch/dp/B07T9DHKXL'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0'}

soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html5lib') # or 'lxml'

title = soup.find(id='productTitle')
price = soup.find(id='priceblock_ourprice')
print(title.get_text(strip=True))
print(price.get_text(strip=True))
印刷品:

Xiaomi Mi Band 4 Activity Tracker,Monitor attività,Monitor frequenza cardiaca Monitoraggio Fitness, Bracciale Smartwatch con Schermo AMOLED a Colori 0,95, con iOS e Android (Versione Globale)
30,96 €

Andrej Kesely在我打字时给了你答案但为了理解为什么会发生这种情况

只需将此打印行添加到汤=…:

soup = BeautifulSoup(page.content,'html.parser')
print(soup.find_all("title"))
title = soup.find(id='productTitle')
这将打印:

[<title dir="ltr">Amazon CAPTCHA</title>]
[亚马逊验证码]

Amazon没有向您的代码“显示”真实页面,而是请求验证码。

您是否尝试检查
soup
值?它有这些元素吗?泰,我必须用sudopip3installlxml安装lmxl,然后它就工作了