我向一个网站发送了一个请求,然后对它进行了解析。有一个列表,但有问题,使其成为一个csv文件表。当我尝试这个:
from bs4 import BeautifulSoup
import requests
import csv
website = requests.get("https://www.tradingview.com/markets/cryptocurrencies/prices-all/")
soup = BeautifulSoup(website.text, 'lxml')
name = soup.find_all('a', class_ ="tv-screener__symbol")
with open('newparser.csv', 'w') as myfile:
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
wr.writerow(name)
输出:
"<a class=""tv-screener__symbol"" href=""/markets/cryptocurrencies/prices-cryptoxtvcbtc/"" target=""_blank"">Bitcoin</a>","<a class=""tv-screener__symbol"" href=""/markets/cryptocurrencies/prices-cryptoxtvceth/"" target=""_blank"">Ethereum</a>","<a class=""tv-screener__symbol"" href=""/markets/cryptocurrencies/prices-cryptoxtvcbnb/"" target=""_blank"">Binance Coin</a>","<a class=""tv-screener__symbol"" href=""/markets/cryptocurrencies/prices-cryptoxtvcada/"" target=""_blank"">Cardano</a>","<a class=""tv-screener__symbol"" href=""/markets/cryptocurrencies/prices-cryptoxtvcusdt/"
不打算把所有的东西都贴出来,但是你明白了。
当我改变:
wr.writerow(name) --> wr.writerow(name.text)
输出:
ResultSet对象没有属性'text'。你可能在治疗a的元素,如单个元素列表。什么时候调用了find_all()你想调用find()?
当我创建一个循环时:
for i in name:
wr.writerow(i.text)
创建如下文件:
"B"我,"t","c","o","我,"n"
"E","t","h","E","r","E","u","m"
"B","我,"n","a","n","c","e","、"C"o","我,"n"
"C","a","r","d","a","n","o"
"T","e","T","h","e","r"
"H","E","X"
"X","R","P"
"S","o","l","a","n","a"
"D","o","g","e","c","o","我,"n"
"U","S","D","、"C"o","我,"n"
"P","o","l","k","a","d","o","t"
"T","e","r","r","a"
"U","n","我,"s","w","a","p"
如何解决这个问题?
writerow
接受一个列的可迭代对象
字符串是可迭代的,导致每个字符被放入列
如果你想写一个单独的值,那么在值
周围放一个列表for i in name:
writer.writerow([i.text])