【问题标题】:BeautifulSoup won't remove i elementBeautifulSoup 不会删除 i 元素
【发布时间】:2016-07-31 13:21:23
【问题描述】:

我正在学习如何使用beautiful soup 解析和操作html,如下所示:

from lxml.html import parse
import urllib2
from urllib2 import urlopen
from BeautifulSoup import BeautifulSoup

url = 'some-url-here'
req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) 
parsed = urllib2.urlopen( req )
soup = BeautifulSoup(parsed)

for elem in soup.findAll(['script', 'style', 'i']):
    elem.extract()

for main_body in soup.findAll("div", {"role" : "main"}):
    print main_body.getText(separator=u' ')

结果包含<i> 标签,我不知道如何删除它们。这如何实现,为什么上面的代码没有去掉唯一的标签?

【问题讨论】:

  • 可以分享一下html吗?代码应该可以正常工作

标签: python beautifulsoup web-crawler


【解决方案1】:

问题实际上是您使用的是已弃用的Beautifulsoup3,安装bs4,一切都会正常工作:

In [10]: import urllib2
In [11]: from bs4 import BeautifulSoup # bs4

In [12]: url = 'https://www.gwr.com/'

In [13]: req = urllib2.Request(url, headers={'User-Agent': "Magic Browser"})

In [14]: parsed = urllib2.urlopen(req)

In [15]: soup = BeautifulSoup(parsed,"html.parser")

In [16]: tags = soup.find_all(['script','style','i'])

In [17]: print(len(tags))
25

In [18]: for elem in tags:
   ....:         elem.extract()
   ....:     

In [19]: assert len(soup.find_all(['script','style','i'])) == 0

In [20]: 

【讨论】:

  • 没有问题,不客气。顺便说一句,如果你知道如何使用 xpaths/css,那么 lxml 会比使用 bs4 更有效。
  • 谢谢,我去看看。上个月刚开始接触 Python,所以我怀疑我有很多模块要发现,它们将成为“主食”的一部分。
猜你喜欢
  • 1970-01-01
  • 2018-08-19
  • 2016-06-05
  • 2019-04-16
  • 2022-01-05
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多