1.爬虫
- day01:
- 爬虫基本原理
- requests模块
- BeautifulSoup4
- day02:
- BeautifulSoup4
- selenium
- day03:
- selenium
- 写一些爬虫demo
- 破解登录滑动验证码
- day04:
- scrapy
- day05:
- scrapy
一 爬虫基本原理:
1.什么是爬虫?
- 爬取数据
- 什么是互联网?
- 互联网是由一堆网络设备,将世界上所有的电脑互联到一起;
2.为什么要使用爬虫技术?
- requests 模块底层帮我们封装好了socket套接字,我们只需要关注http协议的通信流程;
- 普通用户获取数据:
- 打开浏览器,输入网址
- 访问目标网站
- 目标网站将数据返回给浏览器
- 浏览器将数据进行渲染
- ctrl + c 、 ctrl + v
- “爬虫程序”获取数据:
- 模拟浏览器往目标网站发送请求:
- 请求库
- requests模块
- selenium模块
- 获取目标网站返回的响应数据
- 服务端会自动将数据返回,无需通过代码实现
- 解析并提取有价值的数据
- 解析模块:
- re正则模块
- BeautifulSoup4解析库: bs4
- xpath解析语法: 通过文档树,查找规则
- selector属性选择解析库: css
- 保存到数据库、或者本地
- 存储库:
- MySQL
- redis
- mongodb
- file
- 爬虫全过程:
- 发送请求
- 获取响应数据
- 解析并提取数据
- 保存数据
- 爬虫三部曲(*******):
1.发送请求(*******)
- 先分析目标网站的http协议请求流程
- 再写代码
2.获取数据
3.保存数据
- 安装
pip3 install requests
-
分析http协议请求流程:
-
谷歌浏览器自带的开发者工具(推荐使用):
-
GET:
-
请求url:
- Request URL: https://www.baidu.com/
-
请求方式:
- Request Method: GET
-
响应头(请求后,服务端返回的数据):
- set-cookies: 服务端告诉浏览器要保存cookies
- Location: 服务端告诉浏览器需要立马跳转的url地址
-
请求头(携带访问目标服务端的数据):
- Cookie
- user-agent: 浏览器凭证,服务端有可能通过它做反扒
- Referer: 当前url,上一次访问的url地址;
-
请求参数:Params
- 可携带1KB左右的数据
- https://www.baidu.com/s?wd=美女
- wd=%E7%BE%8E%E5%A5%B3
-
-
POST:
-
请求url:
- Request URL: https://passport.baidu.com/v2/api/?login
-
请求方式:
- Request Method: POST
-
响应头(请求后,服务端返回的数据):
- set-cookies: 服务端告诉浏览器要保存cookies
- Location: 服务端告诉浏览器需要立马跳转的url地址
-
请求头(携带访问目标服务端的数据):
- Cookie:
- user-agent: 浏览器凭证,服务端有可能通过它做反扒
- Referer: 当前url,上一次访问的url地址; https://www.baidu.com/s?wd=美女
-
请求体:
- 明文用户名:
- 正确用户名
- 正确密文pwd:
- OQUoK471BPXLSQbQ3rKKpbYJZ/x8zgZ91LVs4Bw6sKoNeuJH9KoOkac0mhDiZ/H3n1Adxq1g/tgSD3EEhreqVoxJMO3VxqYH5LDlHR0U0gxeGpeuTaHGKWE4aun6vxVWjYIJcfAmQ3/b2JUqGawYcM9xtJZPrhPU86u/1i7e3DM=
- 明文用户名:
-
-
-
fildder
-
'''
1.发送请求:
- pip3 install requests
'''
# import requests
# from urllib.parse import urlencode
# # 1.请求url,请求方式GET
# url = 'https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3'
#
# # 组织请求头信息
# headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
# }
#
# # 2.通过requests模块发送GET请求
# # 往url地址发送请求,并得到一个返回值,赋值给response变量
# # response == response 对象
# response = requests.get(url, headers=headers)
#
# print(response.status_code) # 200成功
# # 获取响应文本
# print(response.text)
#
# with open('baidu.html', 'w', encoding='utf-8') as f:
# f.write(response.text)
# demo2
# import requests
# from urllib.parse import urlencode
#
# # 1.请求url,请求方式GET
# url = 'https://www.baidu.com/s?' + urlencode({'wd': '美女'})
#
# # 组织请求头信息
# headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
# }
#
# # 2.通过requests模块发送GET请求
# # 往url地址发送请求,并得到一个返回值,赋值给response变量
# # response == response 对象
# response = requests.get(url, headers=headers)
#
# print(response.status_code) # 200成功
# # 获取响应文本
# print(response.text)
#
# with open('meinv.html', 'w', encoding='utf-8') as f:
# f.write(response.text)
# demo3
# import requests
#
# # 1.请求url,请求方式GET
# url = 'https://www.baidu.com/s?'
#
# # 组织请求头信息
# headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
# }
#
# # 2.通过requests模块发送GET请求
# # 往url地址发送请求,并得到一个返回值,赋值给response变量
# # response == response 对象
# response = requests.get(url, headers=headers, params={'wd': '美女'})
#
# print(response.status_code) # 200成功
# # 获取响应文本
# print(response.text)
#
# with open('girl.html', 'w', encoding='utf-8') as f:
# f.write(response.text)