Очистка исторических данных с помощью BeautifulSoup / Pandas - несколько страниц - PullRequest
0 голосов
/ 27 января 2019

Впервые в веб-очистке с использованием Python и возникли проблемы с получением данных в формате таблицы из следующего источника: https://www.uzse.uz/trade_results?mkt_id=ALL&date=26.01.2019&search_key=

Мне удалось получить «необработанную» таблицу с одной страницы:

import requests
from bs4 import BeautifulSoup

page = requests.get("https://www.uzse.uz/trade_results?mkt_id=ALL&date=25.01.2019&search_key=")
soup = BeautifulSoup(page.content, 'html.parser')
tbl = soup.find_all(class_= "col-xs-12 table-responsive")
tbl

Однако идея состоит в том, чтобы собрать все сделки за определенную дату (несколько страниц) за последние 2 года в виде таблицы для дальнейшего исследовательского анализа.На данный момент меня не интересуют URL-адреса во втором и третьем столбцах, и я хочу оставить только имя (например, UZ7004510002 KUMZ, AJ).

Буду признателен за любую помощь, так как я пытаюсь добиться прогресса.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Что касается преобразования вашего вывода в таблицу, вы, безусловно, можете использовать BeautifulSoup для этого, и это нормально, но требует небольшой работы.Но если я увижу, что есть <table> теги, по умолчанию я использую панд, так как он сделает всю работу за вас.И если это даёт мне обратно то, что я хочу, я продолжаю с этим и просто немного манипулирую кадром данных, если мне нужно:

import requests
from bs4 import BeautifulSoup
import pandas as pd

page = requests.get("https://www.uzse.uz/trade_results?mkt_id=ALL&date=25.01.2019&search_key=")
tables = pd.read_html(page.text)
table = tables[0]

Вывод:

print (table)
             Время       ...            Объём торгов
0   25 янв., 15:02       ...            UZS  421 080
1   25 янв., 15:02       ...            UZS  261 360
2   25 янв., 15:02       ...            UZS  682 440
3   25 янв., 15:02       ...                 UZS  27
4   25 янв., 15:02       ...         UZS  15 152 000
5   25 янв., 15:02       ...         UZS  13 500 000
6   25 янв., 15:02       ...          UZS  2 008 245
7   25 янв., 15:02       ...             UZS  17 463
8   25 янв., 15:02       ...            UZS  582 100
9   25 янв., 15:02       ...             UZS  11 642
10  25 янв., 15:02       ...          UZS  6 117 871
11  25 янв., 15:02       ...            UZS  4 581,9
12  25 янв., 15:02       ...            UZS  550 000
13  25 янв., 15:02       ...          UZS  7 232 500
14  25 янв., 15:02       ...                  UZS  1
15  25 янв., 14:29       ...             UZS  32 000
16  25 янв., 14:29       ...              UZS  9 000
17  25 янв., 14:29       ...          UZS  5 337 000
18  25 янв., 14:29       ...          UZS  1 098 000
19  25 янв., 14:26       ...              UZS  122,4

[20 rows x 9 columns]

И, как говорит Омер, просто итерируйте эти значения, чтобы перейти на разные страницы.

0 голосов
/ 27 января 2019

На этом сайте есть только одна таблица, поэтому мы также можем использовать table и анализировать информацию таблицы первого URL

page = requests.get("https://www.uzse.uz/trade_results?mkt_id=ALL&date=25.01.2019&search_key=")

soup = BeautifulSoup(page.content, 'html.parser')
tbl = soup.find('table', attrs={'class': 'table centered-table'}).findAll('td')


array = []
for x in range(0,len(tbl)):
    array.append(tbl[x].text.strip())

print array

Это только этот URL. Вы хотите выполнить анализ за последние 2 года, поэтомуЭто так долго.

Если вы хотите изменить страницу с нижней стороны.Вам нужно изменить URL в соответствии с номером li с нижней стороны.

Вы можете использовать Python Selenium Web Driver для создания робота, который будет автоматически изменять дату, нажимать кнопку и анализировать данные, а затем возвращать результат.

...