一:爬虫简介
(1)图解:
(2)互联网
1:什么是互联网
(1)互联网由pc 网线 交换机 路由器 防火墙互连在一起 连接成一张网状的样式
2:互联网建立的目的
(1) 互联网建立的核心价值 --->数据共享以及传递
(2)互联网建立就是为了将彼此连接在一起使其逻辑跨越空间的限制 ---> 可以实现数据的共享传递
3:什么是上网
(1)作为客户端浏览器向服务端发送请求
(2)服务端接收到客户端的数据请求 进行数据查找 返回给客户端
(3)客户端接收到服务端的数据 进行渲染等
4:爬虫
(1)模拟客户端的请求(浏览器的请求)向服务端发送请求
(2)获取服务端返回的数据
(3)筛选我们所需要的数据
(4)将筛选结果保存
PS:
(1)如果将互联网比作一张大网
(2)那么一台计算机上的数据便相当于一个个猎物
(3)爬虫程序相当于猎人 在互联网上获取猎物
二:爬虫的基本流程
1:图解
2:数据请求
(1)使用http通过request向目标网站发送请求
(2)请求携带一系列http协议所需要的参数
(3)请求头 请求体等等
3:数据回复
(1)如果服务端接受请求并进行回复
(2)得到response回复 包含html代码 文本 图片 视频等等
4:数据解析
(1)正则表达式 ---> 匹配我们所需要的信息
(2)解析html数据库 ---> Beautifulsoup pyquery等
(3)解析json数据 ---> json模块
(4)解析二进制 ---> 以wb的模式读取文件
5:数据存储
(1)以文本的形式
(2)数据库
三:请求与响应
1:图例
2:图解
(1)客户端通过http协议向服务端发送请求
例如:https://www.cnblogs.com/SR-Program/
(2)request:用户通过浏览器(socket client)向服务端(socket server)发送请求
(3)response:接受并分析request的请求参数 进行相应的数据回复(文本 图片 视频等)
(4)存储:在接收到response之后进行数据筛选 对筛选之后的数据进行保存等
四:request模块简介
1:
pip install requests
(2)get请求
(3)常见的请求参数
1:cookie
(1)保存用户状态 校验用户
(2)一串散列值
2:Host
(1)一般为域名
3:referer
(1)表示从哪里来
4:User-agent
(1)标识用户的浏览器等
五:request使用方式
(1)get请求
'''
响应对象 = requests.get(......)
**参数:**
url:请求地址
headers = {} 请求头携带的参数
cookies = {} cookie携带的参数 也可以加入headers中
params = {} get携带的参数
proxies = {'http':‘http://端口:ip’} 验证网站是否使用代理
timeout = 0.5 防止访问时间过长 照成假死
allow_redirects = False # 禁止重定向
'''
(2)post请求
''' 响应对象 = requests.get(......) **参数:** url:请求地址 headers = {} 请求头携带的参数 cookies = {} cookie携带的参数 也可以加入headers中 json = {} 上传json格式的数据 files = {‘file’:open(...,‘rb’)} 上传文件 data = {} post携带数据 timeout = 0.5 防止访问时间过长 照成假死 allow_redirects = False # 禁止重定向 '''
(3)响应参数
''' r.url 获取请求的url r.text 获取相应文本信息 r.encoding = 'gbk' r.content 二进制 r.json() json.loads(r.text) r.status_code 响应状态码 r.headers 响应头 r.cookies 响应cookie(set——cookie) r.history 响应对象 '''
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
url = "http://www.aa7a.cn/user.php" # 请求的url地址 headers = { "Referer": "http://www.aa7a.cn/user.php?&ref=http%3A%2F%2Fwww.aa7a.cn%2Findex.php", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36", } # 请求头 data = { "username": "11401339@qq.com", "password": "123..", "captcha": "txgk", # 验证码 "remember": "1", "ref": "http://www.aa7a.cn/index.php", "act": "act_login", } # post提交的数据 res = requests.post( url=url, headers=headers, data=data ) cookies = res.cookies.get_dict() # cookies存入get_dict中 获取cookie # 获取cookies向主页发起请求 res1 = requests.get( 'http://www.aa7a.cn/', headers=headers, cookies=cookies, ) if "11401339@qq.com" not in res1.text: print("爬取失败") else: print("爬取成功")
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import requests import re url = "https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=24" res = requests.get(url=url) # <a href="video_1625984" class="vervideo-lilink actplay"> 进入跳转到视频页面 reg_text = '<a href="(.*?)" class="vervideo-lilink actplay">' # 正则匹配我们所需要的连接 res1 = re.findall(reg_text,res.text) # print(res1) # 获取一个个连接存入在列表中 for url in res1: url = 'https://www.pearvideo.com/'+url # 获取进入视频连接的地址的页面 # srcUrl="https://video.pearvideo.com/mp4/adshort/20191125/cont-1626153-14629209_adpkg-ad_hd.mp4" 真正的向后端请求视频连接 res2 = requests.get(url=url) # res3 = re.findall("srcUrl='(.*?)'",res2.text) # 获取ship连接 res3 = re.findall('srcUrl="(.*?)"', res2.text)[0] # 存放在列表中 获取出来视频地址 print(res3) name = res3.rsplit('/', 1)[1] # 获取存放的路径 res4 = requests.get(res3) # 爬取一个个视频连接地址 with open(name, 'wb') as f: for line in res4.iter_content(): # 循环打印 f.write(line)
PS:
(1)post与get参数都会形成key=value&key=value的形式
(2)get直接拼接在url中
(3)post则在formdata中
六:总结
#1、总结爬虫流程: 爬取--->解析--->存储 #2、爬虫所需工具: 请求库:requests,selenium 解析库:正则,beautifulsoup,pyquery 存储库:文件,MySQL,Mongodb,Redis #3、爬虫常用框架: scrapy