已解决 这是2.x中的Unicode问题,升级到3.x时没有问题
我正在尝试学习使用Python和BeautifulSoup进行网络抓取,以将数据导出到可读的电子表格中。我有两个问题:
问题1:当遇到诸如商标符号(tm)之类的符号时,我在尝试不同的站点时多次遇到障碍,我该如何删除它或将其编码为可允许大熊猫将数据输出到csv中?
问题2:当我确实导出数据时(通过省略包含问题1中引用的字符的行),这些列不一定按我想要的顺序排列。如何指定列的排列顺序?
问题1尝试的解决方案:
问题2尝试的解决方案:
。
import csv
import requests
from bs4 import BeautifulSoup
import pandas
stocksym = []
stockname = []
stockprice = []
data = requests.get('https://finance.yahoo.com/most-active?offset=0&count=100')
soup = BeautifulSoup(data.text, 'html.parser')
div =soup.find('div', { 'id': 'scr-res-table' })
table = div.find('table')
tbody = table.find('tbody')
for tr in tbody.find_all('tr'):
sym = tr.find_all('td')[0].text.strip()
stocksym.append((sym))
name = tr.find_all('td')[1].text.strip()
stockname.append((name))
price = tr.find_all('td')[2].text.strip()
stockprice.append((price))
df = pandas.DataFrame({
"1Sym": stocksym,
"2Name": stockname,
"3Price": stockprice
})
df.to_csv("output.csv", index=False)
print(df)
我希望排名前100的股票的输出将以符号,名称和价格的列顺序导出到csv。
实际结果是在遇到的第一个不受支持的字符处停止,并且要求我在列名之前加上数字以获取所需的顺序。
答案 0 :(得分:0)
在read_html
中使用pandas
函数会更容易,并且遇到的问题也更少。如果遇到错误,只需安装lxml
库,pandas便会使用该库进行HTML处理。
import csv
import requests
from bs4 import BeautifulSoup
import pandas as pd
data = requests.get('https://finance.yahoo.com/most-active?offset=0&count=100')
soup = BeautifulSoup(data.text, 'html.parser')
div = soup.find('div', { 'id': 'scr-res-table' })
table = div.find('table')
df = pd.read_html(table.prettify())[0][["Symbol", "Name", "Price (Intraday)"]]
df.to_csv("output.csv", index=False, encoding="utf-16")