我正试图刮去这一页:https://www.bitmex.com/app/trade/XBTUSD 获取页面左侧的未结利息数据。我在这个阶段
import bs4
from bs4 import BeautifulSoup
import requests
import re
from selenium import webdriver
import urllib.request
r = requests.get('https://www.bitmex.com/app/trade/XBTUSD')
url = "https://www.bitmex.com/app/trade/XBTUSD"
page = urllib.request.urlopen('https://www.bitmex.com/app/trade/XBTUSD')
soup = bs4.BeautifulSoup(r.text, 'xml')
resultat = soup.find_all(text=re.compile("Open Interest"))
driver = webdriver.Firefox(executable_path='C:\\Users\\Samy\\Desktop\\geckodriver\\geckodriver.exe')
results = driver.find_elements_by_xpath("//*[@class='contractStats hoverContainer block']//*[@class='value']/html/body/div[1]/div/span/div[1]/div/div[2]/li/ul/div/div/div[2]/div[4]/span[2]/span/span[1]")
print(len(results))
结果我得到了0。我为results
变量(也为driver.find_elements_by_xpath("//span[@class='price']/text()"
)尝试了几种不同的方法,但似乎找不到方法。我知道问题是在复制XML路径时出现的,但尽管阅读了Why does this xpath fail using lxml in python?和https://stackoverflow.com/a/43095252/7937578,但似乎无法清楚地理解问题
我只使用通过复制获得的XML路径,但在阅读了这些SO问题后,我在开头添加了部分[@class....]
,但我遗漏了一些东西。如果你知道如何帮助,谢谢你
如果我正确理解了您的需求,以下脚本将从该页面获取所需内容:
他当时的产出:
我不知道它为什么会失败,但我认为找到任何元素的最佳方法是使用完整的XPath
看起来像这样的东西:
试试看
完整路径不是最好的路径,也更难阅读。XPath是“过滤器”,请尝试查找所需控件的一些唯一属性,或父控件的一些唯一描述。看,所需的跨度有“value”类,它位于带有“tooltipWrapper”类的跨度内,父跨度还有另一个子跨度,带有“key”类和“openinterest”文本。有数千个定位器,我可以找到两个:
相关问题 更多 >
编程相关推荐