我的問題與這個問題有點相似:如何在新列中保存正在讀取 pandas read_html() 函式的 url?
我有一組包含表格的鏈接(每個表格 4 個,我只需要其中的前三個)。目標是將每個表的鏈接存盤在單獨的“地址”列中。
links = ['www.link1.com', 'www.link2.com', ... , 'www.linkx.com']
details = []
for link in tqdm(links):
page = requests.get(link)
sauce = BeautifulSoup(page.content, 'lxml')
table = sauce.find_all('table')
# Only first 3 tables include data
for i in range(3):
details.append(pd.read_html(str(table))[i])
final_df = pd.concat(details, ignore_index=True)
final_df['address'] = link
time.sleep(2)
但是,當我使用此代碼時,只有最后一個鏈接分配給“地址”列中的每一行。
我可能遺漏了一個細節,但花了最后 2 個小時才弄清楚這一點并且根本無法取得任何進展 - 非常感謝一些幫助。
uj5u.com熱心網友回復:
您已接近目標 -df['address']在將每次迭代DataFrame添加到您的串列之前,將其添加到您的串列中:
for i in table[:3]:
df = pd.read_html(str(i))[0]
df['address'] = link
details.append(df)
注意 您也可以ResultSet對表進行切片,table[:3]這樣您就不必使用范圍
如果您的迭代結束,將連接移到回圈之外并呼叫它:
final_df = pd.concat(details, ignore_index=True)
例子
import pandas as pd
links = ['www.link1.com', 'www.link2.com','www.linkx.com']
details = []
for link in links:
# page = requests.get(link)
# sauce = BeautifulSoup(page.content, 'lxml')
# table = sauce.find_all('table')
table = ['<table><tr><td>table 1</td></tr></table>',
'<table><tr><td>table 2</td></tr></table>',
'<table><tr><td>table 3</td></tr></table>']
# Only first 3 tables include data
for i in table[:3]:
df = pd.read_html(str(i))[0]
df['address'] = link
details.append(df)
final_df = pd.concat(details, ignore_index=True)
輸出
| 0 | 地址 |
|---|---|
| 表格1 | www.link1.com |
| 表 2 | www.link1.com |
| 表3 | www.link1.com |
| 表格1 | www.link2.com |
| 表 2 | www.link2.com |
| 表3 | www.link2.com |
| 表格1 | www.linkx.com |
| 表 2 | www.linkx.com |
| 表3 | www.linkx.com |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/454301.html
標籤:python-3.x 熊猫 循环 网页抓取 美丽的汤
上一篇:React所有評論選項一鍵出現
