我正在尝试在此页面上获取每个块的描述文本内容
https://twitter.com/search?q=data%20mining&src=typd&vertical=default&f=users。
p p的html看起来像<p class="ProfileCard-bio u-dir" dir="ltr" data-aria-label-part=""><a href="http://t.co/kwtDyFn6dC" rel="nofollow" dir="ltr" data-expanded-url="http://DataMiningBlog.com" class="twitter-timeline-link" target="_blank" title="http://DataMiningBlog.com"><span class="invisible">http://</span><span class="js-display-url">DataMiningBlog.com</span><span class="tco-ellipsis"><span class="invisible"> </span></span></a> covers current challenges, interviews with leading actors and book reviews related to data mining, analytics and data science.</p>
我的代码:
productDivs = soup.findAll('div', attrs={'class' : 'ProfileCard-content'})
for div in productDivs:
print div.find('p', attrs={'class' : 'ProfileCard-bio u-dir'}).text
这里有什么不对吗?在这里获得例外
Traceback (most recent call last):
File "twitter_user_scrapper.py", line 91, in getImageList
print div.find('p', attrs={'class' : 'ProfileCard-bio u-dir'}).text
AttributeError: 'NoneType' object has no attribute 'text'
答案 0 :(得分:2)
问题可能是某些div
class
ProfileCard-content
p
可能没有带有{ - 1}}类的子ProfileCard-bio u-dir
元素,当发生这种情况时,以下内容返回None
-
div.find('p', attrs={'class' : ['ProfileCard-bio', 'u-dir']})
这就是你获得AttributeError
的原因。您应该获得上面的返回值并将其保存在变量中,并检查其是否为None
,并且仅当文本不是None时才接受该文本。
此外,您应该将类作为所有类的列表,而不是单个字符串,如 -
attrs={'class' : ['ProfileCard-bio', 'u-dir']}
示例 -
productDivs = soup.findAll('div', attrs={'class' : 'ProfileCard-content'})
for div in productDivs:
elem = div.find('p', attrs={'class' : ['ProfileCard-bio', 'u-dir']})
if elem:
print elem.text