使用 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 所说,只需遍历这些值即可转到不同的页面。
使用 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 所说,只需遍历这些值即可转到不同的页面。