猿问

使用 Selenium 从网站中抓取值

我正在尝试从以下网站提取数据:

https://www.tipranks.com/stocks/sui/stock-analysis

我的目标是八角形中的值“6”:

我相信我的目标是正确的 xpath。


这是我的代码:


import sys

import os

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

from selenium import webdriver


os.environ['MOZ_HEADLESS'] = '1'

binary = FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe', log_file=sys.stdout)


browser = webdriver.PhantomJS(service_args=["--load-images=no", '--disk-cache=true'])


url = 'https://www.tipranks.com/stocks/sui/stock-analysis'

xpath = '/html/body/div[1]/div/div/div/div/main/div/div/article/div[2]/div/main/div[1]/div[2]/section[1]/div[1]/div[1]/div/svg/text/tspan'

browser.get(url)


element = browser.find_element_by_xpath(xpath)


print(element)

我可以看到问题是由于不正确的 xpath 造成的,但无法弄清楚原因。

我还应该指出,我认为使用 selenium 是抓取该站点的最佳方法,并打算提取其他值并在多个页面上针对不同股票重复这些查询。如果有人认为 BeutifulSoup、lmxl 等我会更好,那么我很高兴听到建议!

提前致谢!


慕慕森
浏览 164回答 3
3回答

繁花如伊

你甚至没有声明所有路径。Octagonal 在哪个类的 div 中,client-components-ValueChange-shape__Octagon所以搜索这个 div。x = browser.find_elements_by_css_selector("div[class='client-components-ValueChange-shape__Octagon']") ## Declare which classfor all in x:    print all.text输出 :6

LEATH

您可以尝试使用此 css 选择器[class$='shape__Octagon']来定位内容。如果我去pyppeteer,我会做以下事情:import asynciofrom pyppeteer import launchasync def get_content(url):    browser = await launch({"headless":True})    [page] = await browser.pages()    await page.goto(url)    await page.waitForSelector("[class$='shape__Octagon']")    value = await page.querySelectorEval("[class$='shape__Octagon']","e => e.innerText")    return valueif __name__ == "__main__":    url = "https://www.tipranks.com/stocks/sui/stock-analysis"    loop = asyncio.get_event_loop()    result = loop.run_until_complete(get_content(url))    print(result.strip())输出:6

qq_笑_17

您在这里似乎有两个问题:对于 xpath,我刚刚做了:xpath = '//div[@class="client-components-ValueChange-shape__Octagon"]'然后做:打印(元素。文本)它得到你想要的价值。但是,您的代码实际上并没有等到浏览器完成加载页面后才执行 xpath。对我来说,使用 Firefox,我只有大约 40% 的时间以这种方式获得价值。Selenium 有很多方法可以处理这个问题,最简单的可能是在 browser.get 和 xpath 语句之间休眠几秒钟。您似乎正在设置 Firefox,但随后使用 Phantom。我没有在 Phantom 上尝试过,Phantom 可能不需要睡眠行为。
随时随地看视频慕课网APP

相关分类

Python
我要回答