无法使用HTML Scrapping导入数据

时间:2018-10-12 13:39:06

标签: python web-scraping python-requests lxml python-requests-html

因此,我正在制作一个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的基本知识,但决定要面对一些挑战。

谢谢。

3 个答案:

答案 0 :(得分:1)

我无法查看有问题的网站(位于防火墙后面),但是您应该知道,当今很多网站都使用javascript等动态内容,因此无法使用基本库正确地对其进行抓取,如果您的xpath确实是正确的,但是什么也不返回,那么这里就是这种情况。

您最好的选择是使用一个可以渲染和抓取这类动态内容的库,例如seleniumRequests-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文件。在这种情况下,您可以使用“硒”库,速度稍慢一些,但总能解决您的问题。