使用python3进行网页抓取

时间:2020-06-09 19:01:03

标签: python python-3.x web-scraping beautifulsoup

我正在尝试获取有关亚马逊产品的一些信息。知道为什么我的代码不起作用。每次我尝试测试这些行时,都会得到“无”输出。 我正在使用Visual Studio。

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)

3 个答案:

答案 0 :(得分:1)

有两个问题:

1。)使用HTTP标头User-Agent。如果没有它,Amazon将向您发送CAPTCHA页面。

2。)作为解析器,选择html5liblxmlhtml.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 €

答案 1 :(得分:1)

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不会在代码中“显示”真实页面,而是在要求验证码。

答案 2 :(得分:0)

包括亚马逊在内的大多数现代网站都使用javascript动态加载网页。使用requests.get发送请求时,您只会获得网页的初始呈现,而不会动态加载内容。您可以使用selenium之类的库来加载动态加载的网页,然后将页面源解析为漂亮的汤。