1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Python爬虫||BeautifulSoup4库-以小猪短租为例

Python爬虫||BeautifulSoup4库-以小猪短租为例

时间:2019-10-27 20:34:25

相关推荐

Python爬虫||BeautifulSoup4库-以小猪短租为例

由于上次的文章被同学吐槽了,正则表达式过于麻烦,那就用BeautifulSoup库吧,比正则表达式简单太多了!只需要简单的几条语句,即可完成网页中某个元素的提取。他是python的一个HTML或者XML的解析库,主要的功能是解析和提取 HTML/XML 数据。

但注意,bs仅用于HTML文件,可以是请求后的网站也可以是本地HTML文件。

BeautifulSoup库是解析,遍历,维护标签树的功能库。

安装:pip install beautifulsoup4

由于BeatutifulSoup3已经没有人维护了,所以需要安装BeatutifulSoup4。

预备知识

导入库

from bs4 import BeautifulSoup

BeautifulSoup的四大对象。

tag(标签)

使用find()方法获取到的结果都是tag对象。

tag.name : 获取标签名称。tag.attrs : 获取标签内所有属性,返回内容用字典形式保存(键值对)。也可以用层级形式进行定位,如:soup.body.div.div.p,但比较麻烦,在BeautifulSoup中实用性不是很高。

内部文字

直接调用.string即可。

BeautifulSoup

即文档全部内容,可以分别取里面的各个属性。

comment

是一种特殊的内部文字,调用时需要对调用内容进行判断。

BeautifulSoup的节点

用这个方法可以使用目标节点的附近节点来进行查找目标节点。

子节点与子孙节点

contents:将子标签存入列表。children:将子标签存入一个迭代器,不是列表。仅包含tag的直接子节点。

父节点与祖先节点

parent:返回父节点的tag。parents:返回祖先节点。

兄弟节点

兄弟节点是存在同一层级下的,如果不存在就返回none。

next_sibling:下一个

previous_sibling:上一个

前后节点

next_element:下一个previous_element:上一个

文档搜索

将BeautifulSoup的基本概念都了解了之后就要使用了,最常用的就是find()和find_all()方法。

属性定位:soup.find_all(‘a’,id=‘name’)

多属性定位:soup.find_all(‘a’,class=“tod”,id=“name”)

前面提到,find()方法获取到的结果都是tag对象,这和HTML文档中的tag相同,可以直接用tag.name和tag.attrs访问对象的属性和名字。

find方法

find()方法返回的是单个元素,也就是第一个匹配的元素,而前者返回的是所有匹配的元素组成的列表。

代码格式为:

find(self,name , attrs , recursive , text , **kwargs)

直接返回结果,不返回列表。

find all()方法

用于查找所有元素,

相较于正则表达式快很多。只需要给它传入一些属性或文本,就可以得到符合条件的元素,功能很强大。

代码格式为:

find_all(name , attrs , recursive , text , **kwargs)

返回结果为列表。

find和find_all的区别

BeautifulSoup中find()方法和find_all()方法的使用方法是一样的,区别在于;

find返回第一个结果,格式为字符串。find_all()返回的是包含所有结果的列表。find找不到目标时返回none,find_all()找不到目标时返回空列表。

实战演示-小猪短租

学会了BeautifulSoup后就用BeautifulSoup4库尝试爬取小猪短租网站上的信息,代码如下:

import requestsimport refrom bs4 import BeautifulSoupurl = "/search-duanzufang-p1-0/" #小猪短租headers = {"User-Agent":" Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"}data = requests.get(url,headers) #请求re = data.text soup = BeautifulSoup(re,'lxml') #用lxml解析器进行解析

这样就已经获取到网页的信息了,接下来就对网页上的信息进行提取,先提取网页上每一个信息的url,使用find_all方法。

url = []for i in range(len(soup.find_all('div',attrs = {'class':'result_btm_con lodgeunitname'}))):url.append(soup.find_all('div',attrs = {'class':'result_btm_con lodgeunitname'})[i].attrs['detailurl'])url

这样就可以提取到网页上的信息。

CSS选择器

Beautiful Soup还提供了另外一种选择器,那就是CSS选择器。使用CSS选择器时,只需要调用select()方法,传入相应的字符串参数,就可以通过CSS选择器来找到相应的tag。

形式为:

[code]选择器{样式}[/code]

在BeautifulSoup中CSS选择器的使用方法主要为下面三种:

通过id查找:

soup.selsct("name")

通过class查找:

soup.selsct(".efg")

通过属性查找:

soup.selsct('a[class="efg"]')

和find_all的实现功能一样,但更为方便些。

BeautifulSoup在爬虫中主要担任数据清洗的任务,掌握BeautifulSoup能解决大部分网站数据清洗问题。

注:本次抓取数据仅作学习研究之用

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。