【Beautifulsoup】如何在网页中通过中文text获取标签

来源:互联网 发布:嫁给程序员好吗 编辑:程序博客网 时间:2024/05/21 09:43


说明:通常我们所看到的网页几乎都是utf-8编码,这点在网页源码中搜索“charset”可以看到。也可以点击此处的方法查看,我们在使用beautifulsoup的时候,难免会有使用text属性来查找标签的时候,英文还好,查找中文的时候(bs.find(text=('钟表')),返回的结果几乎都是None,下面说说这个问题。

当运行以下代码时:

html = urllib2.urlopen(url)bs = BeautifulSoup(html,'lxml')

网页源码将经历一次编码转换,它的原编码是utf8,我们的bs在使用lxml库解析网页时会将网页源码解码为Unicode编码数据,bs的默认解码方式是utf8,很多时候不需要改,此时代码得到的bs对象已经是解码后的Unicode编码的数据了,当我们接着运行以下代码时:

t = bs.find(text=(u"钟表品牌分类"))    print t

若你的代码环境是windows,那你的代码第一行应该有# -*- coding: utf-8 -*-,意思是声明编译器的默认编码是utf8,以支持中文的输入;ok,这样一来我们输入的所有中文都将会是utf8编码,你或许已经明白了,是的,bs对象是Unicode,查找模型是utf8,狗窝里找母猫,当然一无所获。明白了原理,问题就好解决:

t = bs.find(text=(u"钟表品牌分类"))    print t
把text文字转为unicode编码的数据即可。若你爬取的网页源码的编码不是utf8,那就在解析的时候指定解码形式:

bs = BeautifulSoup(html.text,'lxml',from_encoding='gb2312')
当然,如果使用的是强大的requests库,那么在使用requests.get(url).text的时候就已经解码为unicode形式的数据了,bs得到unicode的数据后,会直接进行解析,无需转码。

资源群(IT各领域、非技术)645026970



阅读全文
1 0
原创粉丝点击