Webscraping данных, используя прекрасный Pyll urlib супа с конкретной таблицы данных - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь очистить веб-данные от определенного веб-портала.Ранее я пытался учиться и экспериментировать, и у меня был ограниченный успех с использованием 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 голосов
/ 13 декабря 2018

Причина, по которой вы не получаете никаких данных, заключается в том, что исходный код страницы не содержит данных, которые вы пытаетесь получить.Данные динамически извлекаются и обрабатываются с использованием javascript.

Чтобы получить данные, вам придется либо эмулировать динамическое извлечение, либо использовать безголовый браузер, например, селен, для навигации по странице и извлечения данных таким образом.

- обновление из комментариев -

Учитывая, что вы выбрали с помощью Selenium:

При вашем текущем подходе вы захотите выяснить xpath таблицы, которую выищу.Вы можете получить это, проверив его в браузере и выбрав copy> xpath на элементе.Если вы предпочитаете просто написать собственную запись xpath, вы можете посмотреть, как это можно сделать здесь.

Для таблицы, которую вы хотите, 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>​

Более подробно о том, как использовать Selenium, можно узнать на сайте https://wiki.saucelabs.com/display/DOCS/Getting+Started+with+Selenium+for+Automated+Website+Testing

...