在不打开浏览器的情况下使用 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 解释。
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 浏览器。
结论:
如果您需要自动化,方法是:
如其他答案所述,此网页需要 javascript 来呈现内容,因此您不能简单地使用 lxml, Beautiful Soup 或类似库获取和处理页面。但是有很多 更简单 的方法来获取您想要的信息。
我注意到您提供的 link 以结构化方式从内部 API 获取数据。根据 url,产品编号似乎是 910000800509
。如果您查看 Chrome 开发工具(或浏览器的等效开发工具)中的网络选项卡,您会看到正在向以下 URL:http://groceries.asda.com/api/items/view?itemid=910000800509 发出 GET 请求。
您可以只使用 json and 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
您还可以访问有关该产品的许多其他信息,因为请求 returns 一些 JSON 产品详细信息。
我正在尝试编写一个 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 解释。
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 浏览器。
结论:
如果您需要自动化,方法是:
如其他答案所述,此网页需要 javascript 来呈现内容,因此您不能简单地使用 lxml, Beautiful Soup 或类似库获取和处理页面。但是有很多 更简单 的方法来获取您想要的信息。
我注意到您提供的 link 以结构化方式从内部 API 获取数据。根据 url,产品编号似乎是 910000800509
。如果您查看 Chrome 开发工具(或浏览器的等效开发工具)中的网络选项卡,您会看到正在向以下 URL:http://groceries.asda.com/api/items/view?itemid=910000800509 发出 GET 请求。
您可以只使用 json and 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
您还可以访问有关该产品的许多其他信息,因为请求 returns 一些 JSON 产品详细信息。