我试图编写一个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>
。
如果没有浏览器打开,甚至根本没有浏览器,我怎么能得到感兴趣的元素呢?
编辑: 我之前曾尝试使用urllib
或bash
wget
,两者都缺少需要javascript解释。
答案 0 :(得分:2)
正如其他提到的答案一样,此网页需要使用javascript来呈现内容,因此您无法使用lxml,Beautiful Soup或类似的库来获取和处理该页面。但是,有很多 更简单的 方式来获取您想要的信息。
我注意到您提供的链接以结构化方式从内部API获取数据。根据网址,产品编号似乎为910000800509
。如果您查看Chrome开发工具(或您的浏览器的等效开发工具)中的网络标签,您会看到正在对以下网址发出GET请求:http://groceries.asda.com/api/items/view?itemid=910000800509。
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
才能显示内容,基于此,您需要使用真实 浏览器。
<强>结论:强>
如果您需要自动化,那么可以采用的方法是: