【发布时间】:2015-11-19 18:44:39
【问题描述】:
有几个线程将漂亮的汤数据转换为 csv 文件,但我找不到一个对我的代码有意义的线程。
我正在从《华尔街日报》的最大赢家中挖角。 3 到 103 为我提供了一天内排名前 100 的股票。
在单独的单元格中获取表格中每一行的值时遇到问题。每行应该有 6 个包含数据的单元格。然后它应该转到下一行并给我接下来的 6 个数据点(下一个股票)。
每当我使用下面的方法时,它只会在 WSJ 股票上输出一行,而不是循环多次并每次都转到下一行。我不确定前 6 个 td 标签在第 1 行,然后接下来的 6 个 td 标签在第 2 行。
我尝试通过修改 symbol.text 创建一个名为单元格的列表,但没有成功。
将第一行的所有值都放在第一个 tr 标签中会更容易,因为它们有六个,但它们需要在自己的单元格中。我也试过循环这个也没有运气。
我是 Python 新手,所以最好使用最简单的代码。
import requests
from bs4 import BeautifulSoup
import csv
urlList = ['http://online.wsj.com/mdc/public/page/2_3021-gainnyse-gainer.html',
'http://online.wsj.com/mdc/public/page/2_3021-gainnyse-gainer--20150806.html?mod=mdc_pastcalendar',
'http://online.wsj.com/mdc/public/page/2_3021-gainnyse-gainer--20150805.html?mod=mdc_pastcalendar',
'http://online.wsj.com/mdc/public/page/2_3021-gainnyse-gainer--20150804.html?mod=mdc_pastcalendar',
'http://online.wsj.com/mdc/public/page/2_3021-gainnyse-gainer--20150803.html?mod=mdc_pastcalendar']
for i in range(len(urlList)):
url = urlList[i]
r = requests.get(url)
soup = BeautifulSoup(r.content)
scrapeData = soup.select('tr')[3:103]
for symbol in scrapeData:
print(symbol.text)
outputFile = open('wsjExample.csv', 'w')
outputWriter = csv.writer(outputFile)
outputWriter.writerow(['Number', 'Symbol', 'Price', 'Change', '% Change', 'Volume'])
for row in range(len(scrapeData)):
outputWriter.writerow([symbol('td')[0].text, symbol('td')[1].text, symbol('td')[2].text, symbol('td')[3].text, symbol('td')[4].text, symbol('td')[5].text])
outputFile.close()
谢谢,
【问题讨论】:
-
您能否提供一个完整的最低工作示例并修复您的代码格式?您至少应该为 url 提供所需的数据并修复缩进。你在哪里绊倒了exaclty?你能正确地从网页中提取数据吗?
-
好的,我已经修复了格式并添加了所有代码。我能够提取数据没有问题。当我运行这个程序时,它会一遍又一遍地导出同一行,而不是导出下一行数据。
-
我只是看了一下网页的html代码。您是否知道包含您的数据的整个表都在类
mdcTable的 div 容器中?因此,要获取表格,您可以使用table = soup.find("table", { "class": "mdcTable" })。
标签: python html csv beautifulsoup