【问题标题】:Scraping multiple webpages and writing to a CSV file抓取多个网页并写入 CSV 文件
【发布时间】:2013-11-14 00:55:55
【问题描述】:

我正在编写一个程序,该程序将从网站获取七条数据,并将其写入符号.txt 文件中每个公司的 csv 文件,例如 AAPL 或 NFLX。我的问题似乎来自我对索引的困惑,以使脚本工作。我不知道它是如何适合的。我认为这种格式可以工作......

import urllib2
from BeautifulSoup import BeautifulSoup
import csv
import re
import urllib
# import modules

symbolfile = open("symbols.txt")
symbolslist = symbolfile.read()
newsymbolslist = symbolslist.split("\n")

i = 0

f = csv.writer(open("pe_ratio.csv","wb"))
# short cut to write

f.writerow(["Name","PE","Revenue % Quarterly","ROA% YOY","Operating Cashflow","Debt to Equity"])
#first write row statement

# define name_company as the following
while i<len(newsymbolslist):
    page = urllib2.urlopen("http://finance.yahoo.com/q/ks?s="+newsymbolslist[i] +"%20Key%20Statistics").read()
    soup = BeautifulSoup(page)
    name_company = soup.findAll("div", {"class" : "title"}) 
    for name in name_company: #add multiple iterations?     
        all_data = soup.findAll('td', "yfnc_tabledata1")
        stock_name = name.find('h2').string #find company's name in name_company with h2 tag
        f.writerow([stock_name, all_data[2].getText(),all_data[17].getText(),all_data[13].getText(), all_data[29].getText(),all_data[26].getText()]) #write down PE data
    i+=1    

当我尝试按原样运行代码时,出现以下错误:

Traceback (most recent call last):
  File "company_data_v1.py", line 28, in <module>
    f.writerow([stock_name, all_data[2].getText(),all_data[17].getText(),all_data[13].getText(), all_data[29].getText()
all_data[26].getText()]) #write down PE data
IndexError: list index out of range

提前感谢您的帮助。

【问题讨论】:

  • 拼写为 scraping,而不是 scapping。 (在标签中看那里)。
  • company_data_v1.py 是什么以及在哪里?那就是错误所在的文件,你为什么不给我们看这段代码?
  • company_data_v1.py 是我发布的代码的名称。

标签: python csv web-scraping beautifulsoup


【解决方案1】:

我假设当您说“将变量放在哪里以使脚本工作”时,您指的是这个“汤”变量?您的错误消息中的那个?

如果是这样,那么我建议在您尝试在soup.findAll() 中使用它之前 声明'soup'。正如你所看到的,你声明了soup = BeautifulSoup(page) 一行after soup.findAll()。它应该高于它。

【讨论】:

    【解决方案2】:
    name_company = soup.findAll("div", {"class" : "title"})
    soup = BeautifulSoup(page) #this is the first time you define soup
    

    您在尝试执行soup.findAll 的行之后定义soup。 Python 准确地告诉你问题出在哪里:你没有在 findAll 行定义 soup

    翻转这些行的顺序。

    【讨论】:

    • 我做到了。我现在将用新的错误消息发布修改后的代码。
    • @RobertBirch 这些是您遇到的非常基本的问题,我建议您花时间阅读错误并尝试理解他们在说什么。我们无法逐行调试您编写的每一行代码。
    • 对。您已经完全更改了更改整个问题的代码。你需要学会自己调试代码。
    • @Johnathon Reinhart 我认真地认为我应该禁止自己使用stackoverflow,只是为了学习调试它。我会这样做的。
    • 代码现在可以正常工作,但我要自己解决错误。
    猜你喜欢
    • 2019-11-12
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多