无需打开浏览器即可从python网站获取元素

时间:2015-10-13 00:19:55

标签: javascript python parsing selenium webdriver

我试图编写一个python脚本,它解析网站中的一个元素并简单地打印出来。

如果没有selenium webdiver,我无法弄清楚如何实现这一目标,以便打开一个处理脚本的浏览器来正确显示网站。< / p>

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://groceries.asda.com/asda-webstore/pages/landing/home.shtml#!product/910000800509')
content = browser.page_source
print(content[42000:43000])
browser.close()

这只是一个粗略的草稿,它将打印内容,包括感兴趣的元素<span class="prod-price-inner">£13.00</span>

如果没有浏览器打开,甚至根本没有浏览器,我怎么能得到感兴趣的元素呢?

编辑: 我之前曾尝试使用urllibbash wget,两者都缺少需要javascript解释。

2 个答案:

答案 0 :(得分:2)

正如其他提到的答案一样,此网页需要使用javascript来呈现内容,因此您无法使用lxmlBeautiful Soup或类似的库来获取和处理该页面。但是,有很多 更简单的 方式来获取您想要的信息。

我注意到您提供的链接以结构化方式从内部API获取数据。根据网址,产品编号似乎为910000800509。如果您查看Chrome开发工具(或您的浏览器的等效开发工具)中的网络标签,您会看到正在对以下网址发出GET请求:http://groceries.asda.com/api/items/view?itemid=910000800509

您只需使用jsonrequests模块即可生成此类请求:

import json
import requests

url = 'http://groceries.asda.com/api/items/view?itemid=910000800509'
r = requests.get(url)
price = r.json()['items'][0]['price']

print price
£13.00

这也使您可以访问有关产品的许多其他信息,因为请求会返回一些包含产品详细信息的JSON。

答案 1 :(得分:1)

  

如果没有浏览器打开,我怎么能得到感兴趣的元素,   甚至根本没有浏览器?

检查您尝试解析的页面后

http://groceries.asda.com/asda-webstore/pages/landing/home.shtml#!product/910000800509

我意识到只有启用了javascript才能显示内容,基于此,您需要使用真实 浏览器

<强>结论:

如果您需要自动化,那么可以采用的方法是:

selenium