bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松…

2018-08-07 08:50:21来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

爬虫介绍

学习Python爬虫过程中,一般使用的库主要是:requests 和BeautifulSoup

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

。其中 requests用于将链接转化成html语言,而BeautifulSoup则用于查找需要的内容。具体爬虫原理,请参考文章:Python实战 | 只需 “4步” 入门网络爬虫(有福利哦)。这两个库是爬虫的主要武器,今天主要分析一下第二个利器BeautifulSoup.

BeautifulSoup介绍

Beautiful Soup最主要的功能是使用网页的树形结构和属性等特性来解析网页内容,安装方法如下:

进群:125240963   即可获取数十套·PDF哦!

`python`

pip install beautifulsoup4

在使用bs4解析网页的方法中,一般使用的是通过节点的属性或者过滤器findall()和find()方法。这两个方法都比较繁琐,不够灵活。今天主要是通过采用bs4中的选择器来进行页面解析 。也就是通过网页中的CSS进行选择想要的内容,具体语法是 soup.select()方法。该语法的关键点在于:对于所需内容的精准定位,也就是通过括号()内的语句来实现。

什么是css

CSS(Cascading Style Sheets)层叠样式表是一种用来表现HTML或XML等文件样式的计算机语言. 在使用CSS 时,标签名不加任何修饰,类名(class="className"引号内即为类名)前加点,id名(id="idName"引号前即为id名)前加 #。在爬虫中,我们也可以利用类似的方法来筛选元素,在python中的方法是 soup.select(),返回类型是 list,主要通过以下方法进行查找.

利用Chrome浏览器的检查功能查看网站的css样式。打开科技网页,鼠标放在网页上,右键,选择检查即可看到网页右边多了一个代码部分,具体如下图。

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

通过标签名查找

标签的话,可以直接寻找。直接在select方法中填写标签名字即可,比如a标签。select方法会返回所有a标签的内容。

使用 Chrom浏览器查看命名为a的标签,然后通过python的select方法选择其对应的内容具体如下:

tag = soup.select('a')

print("===============================")

print("通过标签查询信息:")

print(tag)

print("===============================")

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

通过类名查找

对于html内的内容,可以通过class来进行定位.一般形式为:.类名。

使用 Chrom浏览器查看命名为content的类名,然后通过python的select方法选择其对应的内容。

class_name = soup.select('.content')

print("===============================")

print("通过类名查询信息:")

print(class_name)

print("===============================")

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

通过id名查找

id在一个html中是唯一的,因此可以通过id来找寻唯一的内容.在select方法中,具有语法是“#id名字”. 使用 Chrom查看命名为wrapper的id,然后通过python的select方法选择其对应的内容。

css样式中的ID

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

代码以及结果如下

id_wrapper = soup.select('#wrapper')

print("===============================")

print("通过ID查询信息:")

print(id_wrapper)

print("===============================")

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

组合查找

组合查找是通过css中的标签名与类名、id名进行的组合。需要注意:空格隔空。

打开科技网站的图片标题信息,具体的css样式如下图所示。节点section的子几点h4里面有个a节点包括了title信息。

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

使用组合方法查找title信息,代码如下如:

#第二种方法:

titles2 = soup.select('section.content > h4 > a')

print('titles is :'.format(titles2))

结果如下:

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

属性查找

查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则会无法匹配到。具体如下

`python`

'''

print soup.select("head > title")

#[<title>The Dormouse's story</title>]

print soup.select('a[href="http://example.com/elsie"]')

#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]

同样,属性仍然可以与上述查找方式组合,不在同一节点的空格隔开,同一节点的不加空格

print soup.select('p a[href="http://example.com/elsie"]')

#[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]

介绍一个最简单的方法

以上的方法可能比较繁琐,因为需要记住id或者class名字等内容,但是Google浏览器给我们提供了一个非常方便的功能:copy slector,直接可以复制css样式。具体路径是:鼠标放在网页上右键->检查->elements->右键选择copy 找到copy selector

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

实战练习:打开knewone网站,发现很多科技产品,如下图

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

鼠标放在任何一个商品信息的图片上,然后右键,找到css样式,然后使用bs4中的select方法提取图片信息(把copy到的css样式直接复制到select的方法中即可),具体代码如下:

`python`

'''

使用copy获取图片

'''

#直接使用cope seletor

#wrapper > ul > li:nth-child(21) > article > header > a > img

imgs = soup.select('#wrapper > ul > li > article > header > a > img')

效果如下,可以看到select方法返回的是一个列表

bs4是非常牛逼的爬虫库!深度解析爬虫利器,轻松获得网站信息!

 

任何一个静态网页都可以使用上面的爬取利器爬取下来。是不是很好用,赶快试一下吧。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Python安装

下一篇:【leetcode 简单】第五题 最长公共前缀