前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BeautifulSoup解析html介绍

BeautifulSoup解析html介绍

作者头像
震八方紫面昆仑侠
发布2020-07-23 14:19:29
1.7K0
发布2020-07-23 14:19:29
举报

爬虫抓取的数据以html数据为主。有时也是xml数据,xml数据对标签的解析和html是一样的道理,两者都是<tag>来区分数据的。这种格式的数据结构可以说是一个页面一个样子,解析起来很麻烦。BeautifulSoup提供了强大的解析功能,可以帮助我们省去不少麻烦。使用之前安装BeautifulSoup和lxml。

代码语言:javascript
复制
#pip install beautifulsoup4==4.0.1 #指定版本,不指定会安装最新版本
#pip install lxml==3.3.6           指定版本,不指定会安装最新版本
进入Python命令行试试是否安装成功
>>> import bs4
>>> import lxml
>>>

没有报错,说明安装成功。lxml的版本和发布时间可以到下面网站查看

首先代码要引入这个库

代码语言:javascript
复制
from bs4 import BeautifulSoup

然后,抓取

代码语言:javascript
复制
try:
    r = urllib2.urlopen(request)
except urllib2.URLError,e:
    print e.code
    exit()
    
r.encoding='utf8'
print r.code
html=r.read() #urlopen获取的内容都在html中
mysoup=BeautifulSoup(html, 'lxml') #html的信息都在mysoup中了

假设我们对html中的如下部分数据感兴趣

代码语言:javascript
复制
    <data>
        <day>20200214</day>
        <id>1</id>
        <rank>11</rank>
        <name>张三</name>
    </data>
    <data>
        <day>20200214</day>
        <id>4</id>
        <rank>17</rank>
        <name>李四货</name>
    </data>

首先要找到tag标签为<data>的数据,而这类数据不止一条,我们以两条为例。那么需要用到beautifulsoup的find_all函数,返回的结果应该是两个<data>数据。当处理每一个<data>数据时,里面的<id><name>等标签都是唯一的,这时使用find函数。

代码语言:javascript
复制
mysoup=BeautifulSoup(html, 'lxml')
data_list=mysoup.find_all('data')
for data in data_list:#list应该有两个元素
    day = data.find('day').get_text() #get_text是获取字符串,可以用.string代替
    id = data.find('id').get_text()
    rank = data.find('rank').get_text()
    name = data.find('name').get_text()
    #print name  可以print测试解析结果

这是beautifulsoup最简单的用法,find和find_all不仅可以按照标签的名字定位元素,还可以按照class,style等各种属性,以及文本内容text作为条件来查找你感兴趣的内容,非常强大。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL从删库到跑路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档