2014-08-29 46 views
1
import requests 
from bs4 import BeautifulSoup 
url=("http://finance.naver.com/news/mainnews.nhn") 

r=requests.get(url) 
soup=BeautifulSoup(r.content) 

a_data = soup.find_all("li",{"class":"block1"}) 

for item in a_data: 
    print item.contents[0].find_all("dt",{"class":"articleSubject"})[0].text 

在这段代码中,当我运行这段代码时。我有这样的错误。 “AttributeError:'NavigableString'对象没有属性'find_all'”AttributeError:'NavigableString'对象没有属性'find_all'(NameError)

我该如何解决这个问题? 我已经试过尝试和除了方法。然而,它没有工作......

// HTML代码

<li class="block1"> 
<dl> 
<dt class="articleSubject"> 
<span class="remark"></span> <!-- 말머리는 span class="remark" 로 묶임 --> 
<a href="/news/news_read.nhn?  
article_id=0003289339&amp;office_id=009&amp;mode=mainnews&amp;type=&amp;date=2014-08- 
27&amp;page=1">**시총 9조 `모바일 공룡` 다음카카오 합병 승인…업계 지각변동 예고**</a> 
</dt> 
<dd class="articleSummary"> 
다음카카오가 합병을 위한 마지막 문턱을 넘어섰다. 네이버의 독주가 지속되고 있는 온라인·모바일 업계에  
적지 않은 시장 판도 변화가 예상된다. 27일 다음과 카카오는 각각 제주 .. 
            <span class="press">매일경제 </span> 
<span class="bar">|</span> 
<span class="wdate">2014-08-27 11:40:05</span> 
</dd> 
</dl> 
</li> 

回答

1

如果你试图找到与dtclass属性articleSubject相关的文本,你可以直接在发现item

通过这样做:

>>> for item in a_data: 
...  print item.find_all("dt",{"class":"articleSubject"})[0].text 

此打印:

**시총 9조 `모바일 공룡` 다음카카오 합병 승인…업계 지각변동 예고** 

对上述HTML。如果您在代码中针对网址运行此代码,则会得到20个结果。

item.contents是以\n作为第一项的列表。所以做一个find_all()在一个新的一行字符抛出AttributeError

-1

我会单独在你的循环NavigableStrings标签。第一:

import NavigableString 

然后在循环测试在汤中的所有元素,看看他们是标签或NavigableStrings使用:

if isinstance(object, NavigableString): 
    Do something with this event 
else: 
    Do something with thing that is not NavigableString 
相关问题