使用python从网站获取元素,无需打开浏览器
Get element from website with python without opening a browser
我想写一个python脚本,从一个网站解析一个元素,只是打印它。
我不知道如何实现这一点,没有selenium
的webdiver
,为了打开一个浏览器,处理脚本,以正确显示网站。
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解释。
正如其他答案所提到的,这个网页需要javascript来呈现内容,所以您不能简单地使用lxml、Beautiful Soup或类似的库来获取和处理页面。但是有一种更简单的方法来获取你想要的信息。
我注意到您提供的链接以结构化的方式从内部API获取数据。根据url,产品编号是910000800509
。如果您查看Chrome开发工具(或浏览器的等效开发工具)中的网络选项卡,您将看到正在向以下URL发出GET请求:http://groceries.asda.com/api/items/view?itemid=910000800509。
你可以像这样用json和requests模块发出请求:
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。
如何在不打开浏览器的情况下获得感兴趣的元素?或者根本没有浏览器?
检查要解析的页面后:
http://groceries.asda.com/asda-webstore/pages/landing/home.shtml !产品/910000800509
我意识到它只有在启用javascript
时才显示内容,基于此,您需要使用真实的浏览器。
结论:
如果你需要自动化,方法是:
硒- 浏览器是否持久缓存脚本元素的编译版本
- 如何在浏览器窗口变大/变小时捕捉元素的宽度
- Selenium无法在浏览器DOM中定位元素
- Android浏览器设置元素大小太小
- 在浏览器之前滚动不可见的元素
- 如何在浏览器中选择所有*renderable*文本元素
- 同一元素的 this.id 值在浏览器之间是不同的
- 在不使用 CSS 的情况下,将元素与浏览器屏幕顶部保持设定的距离
- 如何从浏览器隐藏视频src属性's检查元素
- 将html元素渲染到浏览器视口
- 如何检测html元素是否在浏览器窗口中
- 是否有跨浏览器和跨框架的方法来检查对象是否是HTML元素
- 禁用浏览器自动选项(显示输入元素中保存的单词)
- Android默认浏览器:谷歌地图制作“;位置:相对;元素在页面顶部滚动
- 如何克隆<浏览器>元素
- 获取元素高度的正确方法(使用所有浏览器?)
- 如何在没有safari的情况下为浏览器隐藏视频元素
- 触摸浏览器中的某个元素(如指针事件:无)
- 如何识别浏览器元素[XUL/firefox]的选项卡关闭事件
- 是否可以将findbar与非浏览器元素一起使用