【问题标题】:get text content from p tag从 p 标签获取文本内容
【发布时间】:2015-07-30 09:41:02
【问题描述】:

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

https://twitter.com/search?q=data%20mining&src=typd&vertical=default&f=users。

html for p 标签看起来像

<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>

我的代码:

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'

【问题讨论】:

  • 有什么异常?
  • @AnandSKumar:更新问题

标签: python web-scraping beautifulsoup


【解决方案1】:

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

div.find('p', attrs={'class' : ['ProfileCard-bio', 'u-dir']})

这就是您获得AttributeError 的原因。你应该得到上面的返回并将它保存在一个变量中,并检查它是否是None,只有当它不是无时才取文本。

此外,您应该将 class 作为所有 classes 的列表,而不是单个字符串,如 -

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

【讨论】:

  • 你在使用 bs3 吗? BeautifulSoup3 .
  • 尝试最新的 - div.find('p', attrs={'class' : ['ProfileCard-bio', 'u-dir']})
  • 当我打印 parced 内容时,它看起来像这样 https://Data.gov\xa0 is the central clearinghouse of the U.S. Government\u2019s open data. 我需要在这里进行任何编码吗?
  • 打印时会这样吗?
  • 打印时应该没问题,尝试打印,那只是编码,但是当你在解释器中检查elem.text时,你会得到它的repr()输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多