使用python从网站获取元素,无需打开浏览器

Get element from website with python without opening a browser

本文关键字:浏览器 元素 python 网站 获取 使用      更新时间:2023-09-26

我想写一个python脚本,从一个网站解析一个元素,只是打印它。

我不知道如何实现这一点,没有seleniumwebdiver,为了打开一个浏览器,处理脚本,以正确显示网站。

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解释。

正如其他答案所提到的,这个网页需要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时才显示内容,基于此,您需要使用真实的浏览器


结论:

如果你需要自动化,方法是: