使用python美丽的汤urllib和特定的数据表进行网络抓取数据

时间:2018-12-12 00:43:30

标签: python-3.x web-scraping beautifulsoup urllib

我正在尝试从特定的Web门户中抓取Web数据。我以前曾尝试学习和试验,但使用beautiful_soup和urllib的成功有限。

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

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'形式的行。

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>

所附图片是数据在网站上的显示方式

picture of table data

----从评论中更新----

我开始尝试硒,这是我的经验

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"))

1 个答案:

答案 0 :(得分:0)

未获取任何数据的原因是该页面的源代码不包含您尝试获取的数据。数据是使用javascript动态检索和呈现的。

要获取数据,您要么必须模拟动态检索,要么使用诸如硒之类的无头浏览器来浏览页面并以这种方式检索数据。

-从评论更新-

鉴于您已使用Selenium选择了

使用当前的方法,您将要找出要查找的表的xpath。您可以通过在浏览器中检查它,然后在元素上选择copy> xpath来获得它。如果您只想编写自己的xpath表示法,则可以查看如何完成here.

对于表,您希望xpath类似于//table[@class="summary data-table"]

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

$x('//table[@class="summary data-table"]')

如果您想使用更快的方法,可以使用querySelectors或CSS:

document.querySelector('table.summary.data-table')

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

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