首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用特定数据表的python美汤urllib进行with抓取数据

使用特定数据表的python美汤urllib进行with抓取数据
EN

Stack Overflow用户
提问于 2018-12-12 08:43:30
回答 1查看 77关注 0票数 1

我正在尝试从一个特定的门户网站抓取网络数据。我以前曾尝试过学习和实验,但使用beautiful_soup和urllib的成功有限。

下面是我的代码,它似乎没有抓取我需要的数据……

代码语言:javascript
复制
httpLoc = 'https://uk.investing.com/currencies/forex-options'
url = requests.get(httpLoc,headers={'User-Agent': 'Mozilla/5.0'})
fx_data = np.array([])

content_page = soup(url.content,'html.parser')
containers = content_page.findAll('table', {'class':'vol-data-col'})
for table in containers:
    for td in table.findAll('vol-data-col'):
        #print(td.text)
        fx_data = np.append(fx_data, td.text)

网站中的html代码具有以下形式。我正在尝试迭代地提取数字形式为'14.77‘的所有行

代码语言:javascript
复制
td class="vol-data-col ng-binding ng-scope" ng-mouseover="PageSettings.setHoverInstrumentTitle(instruments[$parent.$index].title)" ng-mouseleave="PageSettings.clearHoverInstrumentTitle(instruments[$parent.$index].title)" ng-repeat="period in periods" ui-sref="currency" ng-click="PageSettings.clearHoverInstrumentTitle(); $parent.$parent.$parent.currentTenor = period.name; summaryClickFunc(period, instruments[$parent.$index]); periods[$index].active = true">14.77%</td>

附件中的图片是数据在网站上的外观

-从评论更新

我开始尝试使用硒,这是我所拥有的:

代码语言:javascript
复制
import os from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome("C:\\Python\\chromedriver.exe")
# Initialize the webdriver session 
driver.get('https://uk.investing.com/currencies/forex-options')
# replaces "ie.navigate" 
test = driver.find_elements_by_xpath(("//*[@id='curr_table']/class"))
EN

回答 1

Stack Overflow用户

发布于 2018-12-13 08:44:58

您没有获得任何数据的原因是页面的源代码不包含您试图获取的数据。使用javascript动态地检索和呈现数据。

要获取数据,要么必须模拟动态检索,要么使用selenium这样的无头浏览器在页面中导航并以这种方式检索数据。

--来自评论的更新--

假设您已经选择了使用Selenium:

使用当前的方法,您需要确定要查找的表的xpath。您可以在浏览器中检查它,然后在元素上选择copy > xpath。如果只想编写自己的xpath表示法,可以看看here.是如何实现的

对于您想要的表,xpath应该类似于//table[@class="summary data-table"]

要测试各种xpath,可以将它们作为查找粘贴到浏览器的控制台中:

代码语言:javascript
复制
$x('//table[@class="summary data-table"]')

如果你想要一个更快的方法,你可以使用querySelectors或css:

代码语言:javascript
复制
document.querySelector('table.summary.data-table')

# output from the browser
<table class=​"summary data-table">​…​</table>​

要更深入地了解如何使用Selenium,可以访问https://wiki.saucelabs.com/display/DOCS/Getting+Started+with+Selenium+for+Automated+Website+Testing

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53734492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档