无法使用HTML抓取导入数据

2024-06-09 08:08:29 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在做一个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有基本的了解,但我决定要面对一些挑战

提前谢谢


Tags: httpapple网站htmlwww价格pricecomparison
3条回答

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

因为它是一个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)

我不能查看有问题的网站(在防火墙后面),但是你应该知道,现在很多网站都有使用javascripts之类的动态内容,并且不能使用基本库正确地获取这些内容,如果你的xpath确实正确,但没有返回任何内容,我假设这里就是这种情况

最好的选择是使用一个库,它可以呈现和刮取这些类型的动态内容,例如seleniumRequests-HTML(我的首选,因为它是无头的)

相关问题 更多 >