上一篇文章讲了一些xpath的基本用法,现在来介绍一下bs4,bs4也是一个第三方库 需要引入,bs4是 第三方库 和xpath作用一样,都是用来解析html数据,相比之下,xpath的速度会快一点,xpath底层是用c来实现的
引入语法:
from bs4 import BeautifulSoup
1.bs4的简单的语法,不多说,直接上代码:
本地创建一个html文件index.html内容如下
<!DOCTYPE html>
<!--html标签称之为根标签-->
<html lang="en">
<!--头-->
<head>
<meta charset="UTF-8">
<title>美食杰</title>
</head>
<!--身体-->
<body>
<!--ul列表-->
<ul>
<!--li单元格-->
<li>啤酒</li>
<li>饮料</li>
<li>矿泉水</li>
<li>
<!--a标签 超链接标签-->
<!--href 为超链接属性-->
<a class="bd net" id="baidu" href="https://www.baidu.com">百度</a>
</li>
<li>
<a id="jd" class="shopping" href="https://www.jd.com">京东</a>
</li>
<li>
<a class="shopping" href="https://www.taobao.com">淘宝</a>
</li>
</ul>
<p class="first">first_people</p>
<p class="first" id="one">first_id</p>
<p class="first seconde" id="two">seconde_class</p>
<div class="now">
first_div_element
<p class="third">third</p>
<a href="https://www.meishij.net">美食杰</a>
</div>
</body>
</html>
使用bs4 爬取创建的html文件 获取其中的内容
from bs4 import BeautifulSoup
# BeautifulSoup 里面需要两个参数
# 一个为open方法 一个为固定写法'lxml'
# open 方法里面需要两个参数
# 1.想要解析的数据
# 2.设置编码格式
bs = BeautifulSoup(open('index.html',encoding='utf-8'),'lxml')
print(bs)
print(type(bs))
# 获取网页当中的title标签
print(bs.title)
# 获取head标签及head标签内部的所有其他标签
print(bs.head)
# 获取网页当中的第一个a标签
print(bs.a)
# 总结:bs.XX
# 获取所有XX当中的第一个XX以及第一个XX当中的内容
print(bs.name)
# name在此指的是获取当前内容的标签名 bs为一个整体而不是某一个具体的标签
# document文档
# 获取head的标签名
print(bs.head.name)
# attrs
# attribute 属性
# 获取标签的所有属性
# 如果没有做特别处理,bs.XX永远获取的是所有XX中的第一个XX
print(bs.a.attrs)
print(bs.a['id'])
print(bs.a['href'])
# class和id不一样
# id必须是唯一的 一个标签只能有一个id
# class不是唯一的不同标签可以拥有同一个class
# 同一个标签也可以拥有多个class
print(bs.a['class'])
# delete删除
print(bs.a)
del bs.a['id']
print(bs.a)
# 获取指定标签的文本内容
print(bs.a.string)
# string获取的文本指的是本标签的文本
# 不包含子标签的文本
print(bs.div.string)
# contents能够获取指定标签下面的所有内容
print(bs.head.contents)
print(bs.body.contents)
# 获取所有内容当中指定索引的内容
print(bs.div.contents[1])
2.bs4 简单的爬虫例子,爬取百度新闻,获取标题和链接,这里我用的是谷歌浏览器,右键检查
# 引入requests 和 BeautifulSoup模块
import requests
from bs4 import BeautifulSoup
url = 'http://news.baidu.com/'
# 请求网页获取源码
response = requests.get(url)
# print(response)
# 将源码转化成一个 BeautifulSoup对象 解析源码
bs4_soup = BeautifulSoup(response.content,'lxml')
# print(bs4_soup)
# 使用 BeautifulSoup对象的select方法查找
new_list = bs4_soup.select('ul.focuslistnews li a')
# 返回值是一个列表
print(new_list)
for news in new_list:
# 获取href属性
href = news.get('href')
# get_text()获取标签的文本
text = news.get_text()
print(text,href)
注意:在bs4中#表示id,点. 表示类名,以上就是bs4的一些简单的用法。