无法使用 HTML 抓取导入数据



所以我正在做一个python项目,我决定做一个超市比较的东西。我决定从现有的超市比较网站上获取价格。

我使用这个网站来学习: https://docs.python-guide.org/scenarios/scrape/

首先,我试图从这个网站上获取苹果的价格(在乐购(:

http://www.mysupermarket.co.uk/tesco-price-comparison/Fruit/Tesco_Gala_Apple_Approx_160g.html

使用文档代码的编辑版本,即:

import requests
from lxml import html
page = requests.get('http://www.mysupermarket.co.uk/tesco-price-comparison/Fruit/Tesco_Gala_Apple_Approx_160g.html')
tree = html.fromstring(page.content)
price_tesco = tree.xpath('//*[@id="PriceWrp"]/div[2]/span')
print(price_tesco)

我已经尝试了价格的 xpath 代码,但是当我打印价格时,它不返回任何内容(空列表(

那么我将如何解决这个问题呢?

注意 - 我是HTML抓取的新手,并且对python有基本的了解,但决定有点挑战。

提前谢谢。

我无法查看有问题的网站(在防火墙后面(,但您应该知道,现在很多网站都有使用 javascript 等的动态内容,并且无法使用基本库正确抓取,我假设这里的情况确实xpath是正确的,但什么也没返回。

最好的选择是使用可以渲染和抓取这些类型的动态内容的库,例如Selenium或Requests-HTML(我的偏好,因为它是无头的(。

因为它是一个JavaScript渲染页面,使用requests_html渲染如下:

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('http://www.mysupermarket.co.uk/tesco-price- 
comparison/Fruit/Tesco_Gala_Apple_Approx_160g.html')
r.html.render()
price = r.html.xpath('//*[@id="PriceWrp"]/div[2]/span')[0]
print(price.text)

可能这个网站是动态的,不允许您获取完整的 html 文件。在这种情况下,您可以使用"硒"库,速度稍慢,但总能解决您的问题。

最新更新