【发布时间】:2018-05-31 02:34:04
【问题描述】:
我正在使用配置了 chrome 的 selenium webdriver,并希望从 Yahoo Finance 获取价格。示例页面是:https://finance.yahoo.com/quote/0001.KL
我在 chrome 浏览器中打开了示例页面,并使用检查器导航到页面上突出显示价格的位置,并使用检查器的副本 xpath 在我的 python 脚本中使用。
import os
from lxml import html
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent
ua = UserAgent()
def yahoo_scrape_one(kl_stock_id):
''' function to scrape yahoo finance for a single KLSE stock returns dict'''
user_agent = ua.random
chrome_driver = os.getcwd() + '/chromedriver'
chrome_options = Options()
chrome_options.add_argument('user-agent={user_agent}')
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=chrome_options,
executable_path=chrome_driver)
prefix = 'https://finance.yahoo.com/quote/'
suffix = '.KL'
url = prefix + kl_stock_id + suffix
driver.get(url)
tree = html.fromstring(driver.page_source)
price = tree.xpath('//*[@id="quote-header-info"]/div[3]/div/div/span[1]/text()')
print(price)
test_stock = "0001"
yahoo_scrape_one(test_stock)
打印输出是
['+0.01 (+1.41%)']
这似乎是来自下一个跨度(变化和百分比变化)的信息,而不是价格。对这种奇怪行为的任何见解将不胜感激。任何关于替代方法的建议也会让人高兴。
【问题讨论】:
-
我无法复制您的问题。使用相同的 XPath 时,我得到
['0.36']作为输出。 -
@MihaiChelaru 我已经更新了我的代码片段以包含导入,但我仍然没有得到价格:['0.36'] 你在使用 selenium 的 html.fromstring 方法吗?
-
如果您遇到问题,您不能只从父 div 中获取所有文本,然后删除第一行文本之后的所有内容吗?
标签: python selenium web-scraping