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

2024-10-01 13:38:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个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>。在

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

编辑:我以前尝试过使用urllibbashwget,它们都缺乏必要的javascript解释。在


Tags: fromimportbrowser脚本元素网站selenium浏览器
2条回答

如其他答案所述,此网页需要javascript来呈现内容,因此您不能简单地使用lxmlBeautiful Soup或类似的库来获取和处理页面。但是有一种更简单的方法来获取你想要的信息。在

我注意到您提供的链接以结构化的方式从内部API获取数据。产品编号似乎是基于url的910000800509。如果您查看Chrome dev tools(或浏览器的等效dev tools)中的networking选项卡,您会看到有一个GET请求正在向以下URL发出: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。在

How could I get the element of interest without the browser opening, or even without a browser at all?

检查完要分析的页面后:

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

我意识到它只在启用javascript时显示内容,基于此,您需要使用real浏览器。在


结论:

如果您需要实现自动化,那么方法是:

selenium

相关问题 更多 >