我如何在csv文件中打印从cod得到的网页抓取结果

2024-04-25 02:06:14 发布

您现在位置:Python中文网/ 问答频道 /正文

from bs4 import BeautifulSoup
import requests
import csv
url = "https://coingecko.com/en"

page = requests.get(url)
html_doc = page.content
soup = BeautifulSoup(html_doc,"html.parser")
coinname =soup.find_all("div",attrs={"class":"coin-content center"})
coin_sign = soup.find_all("div",attrs={"class":"coin-icon mr-2 center flex-column"})
coinvalue = soup.find_all("td",attrs={"class":"td-price price text-right "})
marketcap = soup.find_all("td",attrs={"class":"td-market_cap cap "})
Liquidity = soup.find_all("td", attrs={"class": "td-liquidity_score lit text-right "})

coin_name = []
coinsign = []
Coinvalue = []
Marketcap = []
marketliquidity = []
for div in coinname:
    coin_name.append(div.a.span.text)

for sign in coin_sign:
    coinsign.append(sign.span.text)
for Value in coinvalue:
    Coinvalue.append(Value.a.span.text)
for cap in marketcap:
    Marketcap.append(cap.div.span.text)
for liquidity in Liquidity:
marketliquidity.append(liquidity.a.span.text)
print(coin_name)
print(coinsign)
print(Coinvalue)
print(Marketcap)
print(marketliquidity)

我想将输出保存到一个包含5列的csv文件中。第1栏为“硬币名称”,第2栏为“硬币符号”,第3栏为“硬币价值”,第4栏为“市值”,第5栏为“市场流动性”。我怎样才能解决这个问题?你知道吗

我还想限制我收到的数据,因为我只想收到100个coin\u name,但我收到了200个coin\u name。你知道吗


Tags: textnameindivforallfindattrs
1条回答
网友
1楼 · 发布于 2024-04-25 02:06:14
from bs4 import BeautifulSoup
import requests
import csv

url = "https://coingecko.com/en"
page = requests.get(url)
soup = BeautifulSoup(page.content,"html.parser")

#Instead of assigning variable and looping you can use list comprehension.
names = [div.a.span.text for div in soup.find_all("div",attrs={"class":"coin-content center"})]
signs = [sign.span.text for sign in soup.find_all("div",attrs={"class":"coin-icon mr-2 center flex-column"})]
values = [value.a.span.text for value in soup.find_all("td",attrs={"class":"td-price price text-right "})]
caps = [cap.div.span.text for cap in soup.find_all("td",attrs={"class":"td-market_cap cap "})]
liquidities = [liquidity.a.span.text for liquidity in soup.find_all("td", attrs={"class": "td-liquidity_score lit text-right "})]

with open('coins.csv', mode='w',newline='') as coins:
    writer = csv.writer(coins, delimiter=',', quotechar='"')
    #Take only first 100 coins
    for i in range(100):
        writer.writerow([names[i],signs[i],values[i],caps[i],liquidities[i]])

输出将是

Bitcoin,BTC,"$6,578.62","$113,894,498,118","$1,476,855,331"
Ethereum,ETH,$224.49,"$22,995,876,618","$1,256,303,216"
EOS,EOS,$5.73,"$5,193,319,905","$708,339,006"
XRP,XRP,$0.48,"$19,249,618,341","$564,378,978"
Litecoin,LTC,$57.80,"$3,388,966,637","$486,289,650"
NEO,NEO,$18.11,"$1,177,368,159","$160,733,208"
Monero,XMR,$113.64,"$1,871,890,512","$55,235,745"

相关问题 更多 >