网络爬虫概述

网络爬虫与浏览器的区别

在这里插入图片描述

在这里插入图片描述

网络爬虫的定义与作用

网络爬虫的定义

网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,获取响应数据,一种按照一定的规则,自动地抓取万维网信息的程序或脚本

网络爬虫的作用

从万维网上获取, 我们需要的信息

requests请求库

requests 介绍与安装

requests 介绍

requests 是一个优雅而简单的 Python HTTP请求库

requests 的作用是 发送请求获取响应数据
在这里插入图片描述

requests 安装

在终端(命令行工具) 运行这个简单命令即可

pip install requests

requests 基本使用

requests 使用3步骤

  1. 导入模块
  2. 发送get请求, 获取响应:
  3. 从响应中获取数据:

在这里插入图片描述

response 常见属性

  • response.text : 响应体 str类型
  • response.ecoding : 二进制转换字符使用的编码
  • respones.content: 响应体 bytes类型

在这里插入图片描述

案例:实现

在这里插入图片描述

Beautiful Soup 解析库

Beautiful Soup 介绍与安装

Beautiful Soup 介绍

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库

Beautiful Soup 安装

# 安装 Beautiful Soup 4
pip install bs4

# 安装 lxml 
pip install lxml 

BeautifulSoup对象介绍与创建

BeautifulSoup对象

BeautifulSoup对象: 代表要解析整个文档树, 它支持 遍历文档树 和 搜索文档树 中描述的大部分的方法.

创建 BeautifulSoup 对象

在这里插入图片描述

警告问题

在这里插入图片描述

解决警告问题

在这里插入图片描述

BeautifulSoup对象的find方法

find方法的作用: 搜索文档树

  • find(self, name=None, attrs={}, recursive=True, text=None, **kwargs)
  • 参数 name: 标签名
    • attrs: 属性字典
    • recursive: 是否递归循环查找
    • text: 根据文本内容查找
  • 返回
    • 查找到的第一个元素对象
      在这里插入图片描述
案例: 根据标签名查找

在这里插入图片描述

案例: 根据属性查找

需求: 获取文档中的 id 为 link1 的标签
在这里插入图片描述

案例: 根据文本查找

需求: 获取文档中 文本 为 Elsie 的 标签文本

在这里插入图片描述

Tag 对象介绍

Tag对象对应于原始文档中的XML或HTML标签

Tag有很多方法和属性, 可用 遍历文档树 和 搜索文档树 以及获取标签内容

Tag 对象常见属性
  • name: 获取标签名称
  • attrs: 获取标签所有属性的键和值
  • text: 获取标签的文本字符串

在这里插入图片描述

正则表达式

正则表达式的概念与作用

概念

正则表达式(regular expression) 是一种字符串匹配的模式(pattern).

作用

  • 检查一个字符串是否含有某种子串
  • 替换匹配的子串
  • 提取某个字符串中匹配的子串

正则表达式常见语法

在这里插入图片描述
在这里插入图片描述

re.findall() 方法

API

  • re.findall(pattern, string, flags=0)(重点)
  • 作用:
  • 扫描整个string字符串,返回所有与pattern匹配的列表
  • 参数:
    • pattern: 正则表达式
    • string: 从那个字符串中查找
    • flags: 匹配模式
  • 返回
    • 返回string中与pattern匹配的结果列表
  • 举例:
    • re.findall(“\d”,“chuan1zhi2”) >> [“1”,“2”]

看下面两句话结果一样吗 ?

rs = re.findall("a.+bc", "a\nbc", re.DOTALL) 
print(rs) 

rs = re.findall("a(.+)bc", "a\nbc", re.DOTALL) 
print(rs)

findall() 特点: (切记)

如果正则表达式中有没有()则返回与整个正则匹配的列表

如果正则表达式中有(),则返回()中匹配的内容列表, 小括号两边东西都是负责确定提取数据所在位置.

正则表达式中的r原串的使用

观察一下代码输出 ?

rs = re.findall("a\nb","a\nb")
print(rs)

rs = re.findall("a\\nb","a\\nb")
print(rs) 

rs = re.findall("a\\\\nb","a\\nb") 
print(rs)

rs = re.findall(r"a\nb","a\nb") 
print(rs)

结论:

正则中使用r原始字符串, 能够忽略转义符号带来的影响

待匹配的字符串中有多少个\,r原串正则中就添加多少个\即可

案例: 提取最新的疫情数据的json字符串

  • 请求疫情首页内容
  • 提取script标签中各国疫情信息
  • 从各国疫情信息中提取各国疫情的json字符串

在这里插入图片描述

json模块

json模块介绍

json模块是Python自带的模块, 用于json与python数据之间的相互转换.

JSON与Python数据类型的对应关系

在这里插入图片描述

在这里插入图片描述

JSON 转换为 Python

在这里插入图片描述
在这里插入图片描述

Python 转换为 JSON

Python类型数据转换json字符串

在这里插入图片描述
在这里插入图片描述

Python类型数据以json格式写入文件在这里插入图片描述

在这里插入图片描述

案例: 解析最新的疫情数据的json字符串

  1. 发送请求, 获取疫情首页
  2. 从疫情首页中提取各国疫情字符串
  3. 从各国疫情字符串中, 提取json格式字符串
  4. 把json格式字符串, 转换为Python类型

在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐