文章目录
一、爬虫简介
爬虫与普通浏览器的区别
普通浏览器发送请求给服务器,服务器返回后浏览器将数据解析并呈现在页面上
爬虫从服务器返回的内容中找到有用的信息并保存起来
网络爬虫模拟浏览器向服务器发送网络请求,获取响应数据。是一种按一定规则自动抓取万维网信息的程序或脚本
二、requests请求库
2.1 requests请求库的下载
windows下直接使用win+R,输入cmd打开dos窗口输pip install requests
即可
2.2 requests请求库的使用
'''
本例演示requests的基本使用
response的常见属性
response.text:响应体字符串类型
response.encoding:二进制转换字符使用的编码
response.content:响应体的二进制类型
'''
# 1.导入模块
import requests
# 2.发送数据,获取响应
response = requests.get('http://www.baidu.com')
# <Response [200]>
print(response)
# 3.获取响应数据
'''
方法一
'''
# 设置编码为utf-8,否则会乱码
response.encoding = 'utf-8'
# 获取响应内容
print(response.text)
'''
方法二
'''
# 获取二进制数据并解码,与上面的结果相同
print(response.content.decode())
三、BeautifulSoup解析库
3.1 BeautifulSoup解析库的下载
需要在命令行先后输入以下两个命令:pip install bs4
, pip install lxml
即可
3.2 BeautifulSoup的最基本使用
# 1.导入模块
from bs4 import BeautifulSoup
# 2.创建BeautifulSoup对象,指定解析器为lxml
soup = BeautifulSoup('<html>data</html>','lxml')
# <html><body><p>data</p></body></html>
print(soup)
3.3 BeautifulSoup的find方法和Tag标签
'''
BeautifulSoup的find方法
1.find方法的作用:搜索文档树
2.find(self,name=None,attrs={},recursive=True,text=None,**kwargs)
参数:
name:标签名
attrs:属性字典名(指定搜索html中的类名,id名等)
recursive:指定是否递归搜索,若设为False,则只搜索<html>的子标签
text:根据文本内容查找
返回值:
查找到的第一个元素对象
'''
'''
(1)根据标签名进行查找
'''
# 1.导入模块
from bs4 import BeautifulSoup
# 2.准备文档字符串
html = '''<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>超链接</title>
</head>
<body>
<!--文字超链接-->
<a href="http://www.baidu.com" target="_blank" id="link1">百度1</a>
<a href="http://www.baidu.com" target="_blank" id="link2">百度2</a>
<a href="http://www.baidu.com" target="_blank" id="link3">百度3</a>
<a href="http://www.baidu.com" target="_blank" id="link4">百度4</a>
</body>
</html>
'''
# 3.创建BeautifulSoup对象
soup = BeautifulSoup(html,'lxml')
# 4.查找title标签
title = soup.find('title')
# <title>超链接</title>
print(title)
# 5.查找第一个a标签
a1 = soup.find('a')
# <a href="http://www.baidu.com" target="_blank">百度1</a>
print(a1)
# 查找所有a标签
# [<a href="http://www.baidu.com" target="_blank" id="link1">百度1</a>,
# <a href="http://www.baidu.com" target="_blank" id="link2">百度2</a>,
# <a href="http://www.baidu.com" target="_blank" id="link3">百度3</a>,
# <a href="http://www.baidu.com" target="_blank" id="link4">百度4</a>]
a = soup.find_all('a')
print(a)
'''
(2)根据id值进行查找
'''
# 方法一:通过命名参数进行指定
a = soup.find(id='link1')
# <a href="http://www.baidu.com" id="link1" target="_blank">百度1</a>
print(a)
# 方法二:使用attrs来指定属性字典
a = soup.find(attrs={
'id':'link1'})
# <a href="http://www.baidu.com" id="link1" target="_blank">百度1</a>
print(a)
# 方法三:根据文本内容进行查找
text = soup.find(text='百度2')
# 百度2
print(text)
'''
Tag对象
Tag对象对应原始文档中的XML或HTML标签
Tag标签有很多方法和属性,可用于遍历文档树和搜索文档树和获取标签内容
'''
# <class 'bs4.element.Tag'>
print(type(a))
# 标签名: a
print("标签名:",a.name)
# 标签所有属性: {'href': 'http://www.baidu.com', 'target': '_blank', 'id': 'link1'}
print("标签所有属性:",a.attrs)
# 标签中的文本内容: 百度1
print("标签中的文本内容:",a.text)
3.4 爬取丁香园数据的小案例
'''
使用beautifulsoup爬取丁香园疫情数据
'''
import requests
from bs4 import BeautifulSoup
response = requests.get('https://ncov.dxy.cn/ncovh5/view/pneumonia')
data = response.content.decode()
# print(data)
# print('*')
soup = BeautifulSoup(data, 'lxml')
script = soup.find(id='getListByCountryTypeService2true')
text = script.string
print(text)