首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 爬虫(五)

在上节我们已经可以把HTML文档读取出来了,这个文档我们可以存储起来也可以马上把我们需要的信息提取出来,这一步提取的过程就叫做解析。提取信息之前我们需要对HTML文档做些出理,做成Python能出理的数据。这步解析用到的工具是BeautifulSoup,同样这是个Python外部库,要调用这个库得先安装,同样可以用pip或者源码进行安装,当然在anaconda里面这个库也已经安装完的包括下面需要的库,所以用anaconda可以省很多事,非常好用。

这个工具安装好后,还需要解析器,常用的解析器有python的标准库HTML解析器、lxml、html5lib,它们各有优缺点,最受欢迎的还是lxml解析器,因为它解析速度快,这个特性也是我们需要的。当然了,这些库都需要先安装。一切准备就绪后就可以对HTML文档进行操作了。

首先需要构建一个BeautifulSoup对象,方法有两种,一种是之间通过字符串来创建,就是用上一节print出来的那些字符串,可以把这些字符串赋给一个变量如baidu;另一种方法则是通过文件来创建,首先要把那些字符串保存成html文件,比如保存成baidu.html。

soup=BeautifulSoup(baidu,'lxml',from_encoding='utf-8')#第一个参数就是字符串,第二个参数是解析器的名字,第三个参数说明了解析的编码格式

soup=BeautifulSoup(open('baidu.html'))#baidu.html就是刚刚保存的文件

接下来可以看看经过上面的代码处理过会变成什么样子,首先回顾上一节的样子

一团乱麻,不是很规整,现在来看看处理完的

print soup.prettify()#soup是我们刚刚创建的的对象,prettify是一个函数

这样就把HTML文档解析成了一个树形结构,父节点和子节点以及兄弟节点都用空格来区分,这些节点都是Python的对象,可以进行操作。

对象种类分为Tag、NavigableString、BeautifulSoup、Comment四种。Tag就是里面的标记,比如抽取里面的标题

print soup.title

抽取标记的内容

print soup.a #这条语句只能提取出第一条标记

通过上面的代码标记已经提取出来了,但是怎么把标记里面的文字提取出来呢,这个标记里面字符串就是对象NavigableString。

print soup.a.string

在标记a里面除了刚刚提取出的新闻两个字,还有一个网址,同样可以提取出来,而且这种网址也是我们以后基本都需要的信息。

print soup.a['href']

可以看见网址也提取出来了。

知道怎么去提取信息,那就可以提取出所有相似的信息,因为HTML文档编写的时候都很规范,相似的信息都放在相同的标记里面,所以找起来也很方便,而BeautifulSoup也提供了一些函数供我们去抽取我们需要的信息。

比较常用的函数是find_all(name,attrs,recursive,text,**kwargs)函数里面有几个参数,name就是想要查找的标记名字,比如刚刚的标记,刚刚是取第一个,现在是取全部。

print soup.find_all('a')

现在把所有标记a的内容都提取出来了,当然也可以同时查找多个,就是往函数里传入一个列表printsoup.find_all(['a','span'])

kwargs参数就相当于Python中的keyword参数,这个参数可以是字符串、列表、True、正则表达式。比如找所有的href。

print soup.find_all(href=True)

text参数搜索文档中的字符串内容,如搜索视频

print soup.find_all(text='视频')

因为编码问题,视频这两个字没有正常显示,但是这条结果是正确的。

还有两个参数一个是limit,它可以限制结果的个数如

print soup.find_all('a',limit=1)

还有一个参数是recursive,这个代表是否要显示全部子节点,如果值是False则说明显示直接子节点。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171216G0QBA600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券