2013-10-31 70 views
1

我正在使用以下代码写入一个csv文件。Python:BeautifulSoup Findall跳转到下一个标记

import urllib2 
from BeautifulSoup import BeautifulSoup 
import csv 
import re 

page = urllib2.urlopen('http://finance.yahoo.com/q/ks?s=F%20Key%20Statistics').read() 

f = csv.writer(open("pe_ratio.csv","wb")) 
f.writerow(["Name","PE","Revenue % YOY","ROA% YOY","OCF Positive","Debt - Equity"]) 

soup = BeautifulSoup(page) 
all_data = soup.findAll('td', "yfnc_tabledata1") 
f.writerow(('Ford', all_data[2].getText())) 



name_company = soup.findAll("div", {"class" : "title"}) 
# find all h2 

#print soup.prettify 

#h2 div class="title" 

print name_company 

我已经找到我想要的东西摆在csv文件,但现在我需要限制它只是,“福特汽车公司(F)当我打印出来name_company我得到这个:

[<div class="title"><h2>Ford Motor Co. (F)</h2>  <span class="rtq_exch"> <span    class="rtq_dash">-</span>NYSE  </span><span class="wl_sign"></span></div>] 

我尝试过使用name_company.next和name_company.content [0]。什么会工作?name_company使用findall,我不知道是否使.content和.next为空。感谢您提前给予帮助。

回答

2

使用find()获取下一个<h2>标签并使用string读取其文本节点。

name_company = soup.findAll("div", {"class" : "title"}) 
for name in name_company: 
    print name.find('h2').string 

UPDATE:见注释。

for name in name_company: 
    ford = name.find('h2').string 
    f.writerow([ford, all_data[2].getText()]) 

它产生:

Name,PE,Revenue % YOY,ROA% YOY,OCF Positive,Debt - Equity 
Ford Motor Co. (F),11.23 
+0

感谢。我将如何编写在这行代码中打印以代替“Ford”的内容? f.writerow(('Ford',all_data [2] .getText())) –

+0

@RobertBirch:我已经更新了答案。 – Birei