我是 Python 和學習資料分析的新手。我正在嘗試從該網頁上抓取資料:https ://bitinfocharts.com/dogecoin/address/DN5Hp2kCkvCsdwr5SPmwHpiJgjKnC5wcT7
我可以使用簡單的網站抓取資料,但我認為由于 BitInfoCharts 有表格,因此它可能是比我所關注的教程更復雜的 HTML 設定。
我的目標是從包括塊、時間、金額、余額等在內的表中抓取資料,并將其保存在 csv 檔案中。我之前嘗試過使用 pandas,但發現很難從 HTML 中選擇我想要的資料。
為此,我認為我需要做的是從“class =”table abtb tablesorter tablesorter-default”中獲取標題/表資訊,然后從包含“class =”的類中的每個物件中提取所有資訊“trb”。class=trb 因頁面而異(例如,一個人可能有 7 筆交易,而另一個人可能有 40 筆)。我不確定,因為這對我來說是新領域。
我真的很感激任何幫助。
import requests
from bs4 import BeautifulSoup as bs
url = 'https://bitinfocharts.com/dogecoin/address/DN5Hp2kCkvCsdwr5SPmwHpiJgjKnC5wcT7'
headers = {"User-Agent":"Mozilla/5.0"}
r = requests.get(url, headers=headers)
soup = bs(r.content)
table = soup.find_all("table_maina")
print(table)
uj5u.com熱心網友回復:
如果您決定手動執行此操作,則執行相同的操作:
import csv
import requests
from bs4 import BeautifulSoup as bs
url = 'https://bitinfocharts.com/dogecoin/address/DN5Hp2kCkvCsdwr5SPmwHpiJgjKnC5wcT7'
headers = {"User-Agent":"Mozilla/5.0"}
r = requests.get(url, headers=headers)
soup = bs(r.content,'lxml')
table = soup.find(id="table_maina")
headers = []
datarows = []
for row in table.find_all('tr'):
heads = row.find_all('th')
if heads:
headers = [th.text for th in heads]
else:
datarows.append( [td.text for td in row.find_all('td')] )
fcsv = csv.writer( open('x.csv','w',newline=''))
fcsv.writerow(headers)
fcsv.writerows(datarows)
uj5u.com熱心網友回復:
只有一個名為“ table_maina ”的表格元素,因此您應該呼叫 find() 與 find_all()。此外,您需要將“table”標簽指定為 find() 函式中的第一個引數。
嘗試:
table = soup.find('table', id='table_maina')
for tr in table.find_all('tr', class_='trb'):
print(tr.text)
輸出:
4066317 2022-01-17 15:41:22 UTC2022-01-17 15:41:22 UTC-33,000,000 DOGE (5,524,731.65 USD)220,000,005.04121223 DOGE$36,831,545 @ $0.167$-28,974,248
4063353 2022-01-15 11:04:46 UTC2022-01-15 11:04:46 UTC 4,000,000 DOGE (759,634.87 USD)253,000,005.04121223 DOGE$48,046,907 @ $0.19$-23,283,618
...
接下來,要將每一行輸出到 CSV 檔案中,請嘗試以下操作:
import csv
import requests
from bs4 import BeautifulSoup
url = 'https://bitinfocharts.com/dogecoin/address/DN5Hp2kCkvCsdwr5SPmwHpiJgjKnC5wcT7'
headers = {"User-Agent": "Mozilla/5.0"}
r = requests.get(url, headers=headers, verify=False)
soup = BeautifulSoup(r.content, "html.parser")
table = soup.find("table", id='table_maina')
with open('out.csv', 'w', newline='') as fout:
csv_writer = csv.writer(fout)
csv_writer.writerow(['Block', 'Time', 'Amount', 'Balance', 'Price', 'Profit'])
for tr in table.find_all('tr', class_='trb'):
tds = tr.find_all('td')
csv_writer.writerow([x.text for x in tds])
輸出:
Block,Time,Amount,Balance,Price,Profit
4066317 2022-01-17 15:41:22 UTC,2022-01-17 15:41:22 UTC,"-33,000,000 DOGE (5,524,731.65 USD)","220,000,005.04121223 DOGE","$36,831,545 @ $0.167","$-28,974,248"
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/417662.html
標籤:
