请教一个( BeautifulSoup)爬虫获取标签 text 内容时,对带有<font></font>这类类标签处理方法。

2016-05-07 01:45:44 +08:00
 a412739861
尝试着用 python3 和 BeautifulSoup4 爬一些内容。
显示登陆之类的,然后使用 BS 的 find_all("tr")功能就都可以找到所有 tr 标签,用遍历打印 result.td.string 的方法,打印每个表格下第一个 td 的标签内容

有一个的 td.string 报错,无法只打印出标签文字内容。只有 None
我把这个 td 的全部内容直接打印出来,出现如下形式:

<td colspan="2">名称:XXX<font color="#E1E100">xxx</font></td>

问题就应该是出在标签内容里的<font color></font>标签,识别失败。

我想到的办法是,大概把这段内容正则匹配,去掉后面的标签,正则不太熟练,想问问 BeautifulSoup 本身的功能能否比较好的解决这一点呢?

其实还有一个比较奇怪的问题,同一个网页,我用网络请求的办法去获取这个网页,解析没问题,当我自己下载了以后,再去用 BeautifulSoup 的 open 方法打开就不行。我记得很早以前我下载了再去解析是可以的……网页编码是 gbk 。
15311 次点击
所在节点    Python
4 条回复
pimin
2016-05-07 01:58:58 +08:00
直接解析 HTML 不就可以了
一般用 lxml 比较多
TaoAlpha
2016-05-07 02:46:14 +08:00
.findAll(text=True) 可以直接提取 text, 忽略内部所有嵌套的 tag.
ahcat
2016-05-07 03:19:03 +08:00
不用 string ,用 get_text ()
a412739861
2016-05-07 11:03:30 +08:00
@pimin
获取网页时,解析用的是 HTML ,代码是 BeautifulSoup(html.content, "html.parser")
本地 open 时,好像无法选择, open (地址),无法加上 html.parser


@TaoAlpha
findAll(text=True)时,的确会直接提取整个 html 的 text 。
但是一旦我加上 BS 的 find_all("tr"), name 参数,再加上 keywords 查找对应 tag 里面含有某个属性的筛选条件时,就不行了,只打印出[]。
搜索到的一个文档,说「如果你使用 text ,任何指定给 name 以及 keyword 参数的值都会被忽略。」。

看了下文档, text 可以接受正则,我把搜索条件用正则写在 text=re.compile("pattern"),取出掉前面的 name 和 keywords 参数,的确能够直接搜索到要内容。^_^


@ahcat
这方法我喜欢,简单粗暴直接有效!
特意在文档里搜索,写的是返回文字内容。没写对这些的标签的处理,大概作者认为使用者都是 html 有比较好的了解,能够领悟吧(为自己没仔细看找借口)………

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/276888

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX