python爬虫学习笔记
用程序模拟浏览器,输入一个网站从该网站中获取资源或者内容
-
服务器渲染:在服务器端直接把数据和html整合在一起,统一返回给浏览器
-
客户端渲染:在浏览器端、第一次请求只要一个html骨架,第二次请求拿到数据,进行数据展示,在页面源代码中,看不到数据
-
浏览器抓包工具
-
HTTP超文本传输协议 HTML超文本标记语言
解析工具
- re解析
- bs4解析
- xpath解析
请求:
请求行->请求方式 请求url地址协议
请求头->放服务器使用的附加地址
请求体->请求参数
响应:
状态行->协议 状态码(404 302)
响应头->客户端要使用的一些附加消息
响应体->服务器返回的真正客户端的内容(HTML,json)等
请求头重要内容:
请求头中最常见的一些重要内容(爬虫需要):
1. User-Agent:请求载体的身份标识(用啥发送的请求)
2.Referer:防盗链(这次请求是从哪个页面来的?反爬会用到)
3. cookie:本地字符串数据信息(用户登录信息,反爬的token)
响应头中一些重要的内容:
cookie:本地字符串数据信息(用户登录信息,反爬的token)
各种神奇的莫名其妙的字符串(这个需要经验了,一般都是token字样,防止各种攻击和反爬)
请求方式:
GET:显示提交
POST:隐式提交
request第三方模块
pip install requests
JSON 语法规则
JSON是一个标记符的序列。是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。这套标记符包含六个构造字符、字符串、数字和三个字面名。
JSON是一个序列化的对象或数组。
\1. 六个构造字符:
begin-array = ws %x5B ws ; [ 左方括号
begin-object = ws %x7B ws ; { 左大括号
end-array = ws %x5D ws ; ] 右方括号
end-object = ws %x7D ws ; } 右大括号
name-separator = ws %x3A ws ; : 冒号
value-separator = ws %x2C ws ; , 逗号
re正则表达式
常用元字符
操作符 说明 实例
. 表示任何单个字符
[....] 字符集,对单个字符给出取值范围 [abc]表示a、b、c、[a-z]表示a到z单个 字符
[^...] 非字符集,对单个字符给出排出范围 [^abc]表示非a或b或c的单个字符
* 前一个字符0此或无限次扩展 abc*表示ab,abc,abcc等
+ 前一个字符1次或无限次扩展 abc+表示abc,abcc等
? 前一个字符0次或1次扩展 abc?表示ab,abc
| 表示表达式中任意一个 abc|def表示abc、def
{m} 扩展前一个字符m次 ab{2}c表示abbc
{m,n } 扩展前一个字符m到n次(含n) ab{1,2}c表示abc,abbc
^ 匹配字符串开头 ^abc表示abc且在一个字符串的开头
$ 匹配字符串结尾 abc$ 表示abc且在一个字符串的结尾
() 分组标记,内部只能使用“或”操作符 (abc)表示abc,(abc|def)表示abc、def
\d 数字,等价于[0-9]
\D 等价于 [^0-9]
\s 任意一个空白字符
\S 任意一个非空白字符
\w 单词字符,等价于[A-Za-z0-9_]
\w 等价于[^A-Za-z0-9_]
控制字符的个数,量词
字符 功能 位置 表达式实例 完整匹配的字符串
* #匹配前⼀个字符出现0次或者⽆限次,即可有可⽆ 用在字符或(...)之后 abc* abccc
+ #匹配前⼀个字符出现1次或者⽆限次,即⾄少有1次 用在字符或(...)之后 abc+ abccc
? #匹配前⼀个字符出现1次或者0次,即要么有1次,要么没有 用在字符或(...)之后 abc? ab,abc
{m} #匹配前⼀个字符出现m次 用在字符或(...)之后 ab{2}c abbc
{m,n} #匹配前⼀个字符出现从m到n次,若省略m,则匹配0到n次,若省略n,则匹配m到无限次 用在字符或(...)之后 ab{1,2}c abc,abbc
.*贪婪匹配
.* ? 惰性匹配
其他
re.complie(r"\d+) #预加载正则表达式
#findall:匹配字符串所有符合正则的内容
#finditer:匹配字符串所有的内容返回的是迭代器
#serch找到一个就返回
re.compile()
re.S #让.能匹配换行符
(?P<分组名字>正则) 可以单独从正则匹配的内容提取
bs4解析-HTML
按照HTML唯一属性进行查找,可以分层查找
与HTML相结合以标签分割
pip install bs4
<标签 属性='值' 属性='值'>
被标记的内容
</标签>
Xpath是在HTML文档中搜索内容的语言:按照节点的关系进行查找,类似找文件夹找文件
html是xml的一个子集
pip install lxml
from lxml import etree
etree.XML().xpath()
/text()提取文本
//所有子代
/*/通配符任意节点
li[1] #小li第一个 []索引
[@xxxx=xxx] 属性筛选
for+./当前节点继续查找
requests进阶
模拟浏览器登录->处理cookie
防盗链处理->
代理防止被封ip
过程
登录->得到cookie
带着cookie去请求到书架url->内容
必须把上面两个操作连起来
可以把session进行请求->session是一连串的请求,在此过程中cookie不会丢失
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jUAWQTQp-1637138997559)(C:%5CUsers%5C16027%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20211116211932050.png)]
录->处理cookie
防盗链处理->
代理防止被封ip
过程
登录->得到cookie
带着cookie去请求到书架url->内容
必须把上面两个操作连起来
可以把session进行请求->session是一连串的请求,在此过程中cookie不会丢失
[外链图片转存中...(img-jUAWQTQp-1637138997559)]