python soup findall 第几个元素_Python经常使用的几个解析库的学习整理。BeautifulSoup。...

这将会是一系列的文章,整理本身以前学习爬虫的各个模块,只是粗略的过一下,介绍部分简单实例。html

从接触python爬虫到如今,基本上用过了全部经常使用的解析库。前端

lxml,BeautifulSoup,pyquery。固然了,还有re。html5

我的认为前端基础比较扎实的,用pyquery是最方便的,固然了,beautifulsoup也不错,re速度比较快,可是写正则比较麻烦。python

lxml的速度也是相对较快的,建议使用。程序员

固然了,既然用python,确定仍是本身用着方便最好。正则表达式

首先介绍beautifulsoup这个库,由于最开始接触爬虫的时候,就看到你们强力推荐这个库。后来用了下,觉着确实不错。可是程序员嘛,哪能在一个库里闷死,哈哈。python爬虫

几个库的安装过程就再也不累述,参考anaconda。-_-.学习

后面几个实例,均用这个来测试。测试

html = """

The Dormouse's story

The Dormouse's story

Once upon a time there were three little sisters; and their names were

,

Lacie and

Tillie;

and they lived at the bottom of a well.

...

"""

BeautifulSoup

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器。例如lxml HTML,lxml XML,html5lib。不过要安装这些库,不然它会使用python的内部标准库。spa

beautifulsoup的对象建立有两种方式。

1.  soup=BeautifulSoup(html) #用变量内容来建立

2.  soup=BeautifulSoup('mysite.html') #用本地文件来建立

BeautifulSoup是将HTML转化为一个复杂的树形结构,每一个节点都是python对象,有前端基础的同窗会知道,相似DOM对象。BeautifulSoup中的对象大体有四种,Tag、NavigableString、BeautifulSoup、Comment。因为咱们平时操做大多数是针对一个个标签提取信息,因此我简略的叙述下经常使用到的Tag对象。

Tag

tag就是HTML的一个个标签。

例如HTML中的 head,title,a,p等等。

在实际操做中,咱们会将所须要的标签经过选择器查找出来,而后经过操做Tag对象来获取所需信息。在BeautifulSoup中,经常使用的findAll()和find()来搜索文档树来获取本身所需的标签。同时,BeautifulSoup也支持CSS语法来搜索,select()方法,返回的类型是list。

ps:

1.findAll()等同于find_all()

2.对前端比较了解的,用select()方法比较顺手。

(1)findAll(name,attrs,recursive,text,**kwargs)

1.name参数能够查找全部名为name的tag,字符串对象会自动忽略。对于name参数,能够传入下列对象。

a)字符串:最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容,下面的例子用于查找文档中全部的

标签.

例:

soup.findAll('p')

#会返回全部p标签

b)正则表达式:传入的正则表达式做为参数时,BeautifulSoup会经过re.match()来匹配内容。

例: soup.findAll(re.compile('^b'))#默认已导入re

#本语句会查找全部b开头的标签,例如:body,b

c)传列表:传入列表时,BeautifulSoup会将全部与列表中任一匹配的元素返回。

例:

soup.findAll(['p','title'])

经常使用的就这3个,还有传方法和传真。

2.keyword参数(若是一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数看成指定名字tag的属性来搜索,若是包含一个名字为 id 的参数,Beautiful Soup会搜索每一个tag的”id”属性。当想用class的时候,因为class是python的关键词,不能直接用,能够用class_代替class)

soup.findAll(id='box')#找出id值为box的tag

soup.findAll(href=re.compile('baidu'))#href包含‘href’的tag

soup.findAll(href=re.compile('baidu'),id='box1)#传入多个参数,找出同时知足两个条件的tag

soup.findAll(class_='myclass')#找出class值为myclass的tag,注意下划线不能少#特殊的参数能够定义字典参数来查找。查找多个参数时,也能够用此方法

soup.findAll(attrs={'class':'myclass','id'='box'})

3.text参数

经过传入text参数能够搜索文档中与字符串内容相同的内容。(不经常使用)。可传入的与name同样。

实例,略。

4.limit参数

用于限制返回搜索的结果数,当搜索的达到limit限制时,就中止搜索返回搜索结果。

ps:find()至关于findAll()中limit=1的时候。

实例,略

5)recursive参数

recursive的默认参数为True,BeautifulSoup会查找全部后代节点,而只想搜索子节点时,可设置参数为False。

实例,略。

find()

find()至关于findAll()中limit=1的时候,不过find()返回的是结果,findAll()返回的是一个列表。

CSS选择器

beautifulsoup支持CSS语法的选择器来查找所须要的标签。

select(CSS选择器)

例:

soup.select('.myclass #box')#后代选择器

soup.select('head>title')#子选择器

soup.select('div+p')#相邻兄弟选择器

soup.select('div~p’)

#后续兄弟选择器

同时还能够加入属性查找。

soup.select('.myclass a[id="box"]')

select()方法返回的是列表形式。

以上差很少就是BeautifulSoup经常使用的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值