使用 BeautifulSoup/Pandas 抓取历史数据 - 多个页面

Scraping historical data with BeautifulSoup/Pandas - multiple pages

使用 Python 进行网络抓取的新手,无法从以下来源获取 table 格式的数据:https://www.uzse.uz/trade_results?mkt_id=ALL&date=26.01.2019&search_key=

我能够从单个页面获得 "raw" table:

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

但是,我们的想法是以 table 格式获取过去 2 年给定日期(多页)的所有交易,以进行进一步的探索性分析。此时我对第二列和第三列中的 URL 不感兴趣,只想保留名称(即 UZ7004510002 KUMZ,AJ)。

在我努力取得进展的过程中,我将不胜感激。

此站点只有一个 table,因此我们也可以使用 table 并解析第一个 url 的 table 信息

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.You近两年想解析所以这么久

如果您想从底部换页。您需要根据底部 li 的数量更改 url 。

您可以使用 Python Selenium Web Driver 创建一个自动更改日期的机器人,单击按钮并解析数据,然后 return 结果。

就将您的输出转换为 table 而言,您当然可以使用 BeautifulSoup 来做到这一点,没关系,但确实需要一些工作。但是如果我看到有 <table> 标签,我的默认设置是 pandas,因为它会为您完成工作。如果它以可回收的方式返回我想要的东西,我会接受它并在需要时稍微操作一下数据框:

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]

正如 Omer 所说,只需遍历这些值即可转到不同的页面。