因此,我正在制作一个python项目,在此我决定进行超市比较。我已经决定从现有的超市比较网站上获取价格。
我使用此网站来学习: https://docs.python-guide.org/scenarios/scrape/
首先,我尝试从此网站获取苹果的价格(在Tesco):
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 Scraping的新手,具有python的基本知识,但决定要面对一些挑战。
谢谢。
答案 0 :(得分:1)
我无法查看有问题的网站(位于防火墙后面),但是您应该知道,当今很多网站都使用javascript等动态内容,因此无法使用基本库正确地对其进行抓取,如果您的xpath
确实是正确的,但是什么也不返回,那么这里就是这种情况。
您最好的选择是使用一个可以渲染和抓取这类动态内容的库,例如selenium或Requests-HTML(由于没有头,所以我很喜欢)。
答案 1 :(得分:1)
因为它是一个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)
答案 2 :(得分:0)
此网站可能是动态的,不允许您获取完整的html文件。在这种情况下,您可以使用“硒”库,速度稍慢一些,但总能解决您的问题。