Python 从p标记获取文本内容

Python 从p标记获取文本内容,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正在尝试获取此页面上每个块的描述文本内容 用于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" ta

我正在尝试获取此页面上每个块的描述文本内容

用于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">&nbsp;</span></span></a> covers current challenges, interviews with leading actors and book reviews related to data mining, analytics and data science.</p>
这里有什么问题吗?这里有例外吗

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'

问题可能是一些
div
class
作为
ProfileCard content
div可能没有一个子
p
元素和class-
ProfileCard bio u-dir
,当这种情况发生时,以下返回
None
-

div.find('p', attrs={'class' : ['ProfileCard-bio', 'u-dir']})
这就是您获得
属性错误的原因。您应该获取上面的返回值并将其保存在一个变量中,并检查其
是否为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

有什么例外?@AnandSKumar:更新了问题您是否使用bs3?BeautifulSoup3.尝试最新的-
div.find('p',attrs={'class':['ProfileCard-bio','u-dir']})
当我打印包裹内容时,它看起来是这样的
https://Data.gov\xa0是美国政府开放数据的中央清算所。
这里需要编码吗?打印时是这样吗?打印时,应该可以,试着打印,这只是编码,但当您在解释器中选中
elem.text
时,您会得到它的
repr()
输出。
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