DAY 87 爬虫01

1 支付接口
-校验金额
   -生成id号
   -获取user对象
   -生成支付链接
   -入库前准备
   -保存数据
   
2 支付回调get回调,调前端
-查询一下这个订单是否支付成功
3 支付宝post回调
-验证签名(sdk提供了)
   -修改订单状态
   -给支付宝回复succes
4 买了一个云服务器
-公有云,私有云(公司内部云服务器)
   -虚拟化,kvm,vmware...
   -openstack:python写的,管理虚拟机的,阿里飞天
   -docker,k8s
   
   
5 装mysql,装redis,装python3.6,装nginx,建立虚拟环境
6 部署前后端项目
-前端:build---》传上去---》nginx代理
   -后端
  -uwsgi运行django,可以跑在多个端口上
  -uwsgi配置+wsgi.py(配置文件)
       -nginx转发动态请求到uwsgi(转发uwsgi协议)
       -有前后端混合的代码收集静态文件
      -动静分离
           -nginx转发

 

1 爬虫基本原理

1 爬虫流程
-(Request,selenium)使用请求库请求数据(http请求),网页,app--》很多反扒
   -(bs4,lxml)html格式解析,json格式---》数据清洗   ----》有反扒
   -入库(mysql,redis,mongodb,文件,excel)
   
2 可见即可爬
3 爬虫协议:https://www.cnblogs.com/robots.txt
   
4 百度,谷歌,搜索引起都是爬虫
-百度一刻不停的取互联网上爬取页面----》存到自己库中
   -使用百度搜索---》百度库中搜(全文检索es,分词,打分)---》返回
   -百度快照(百度爬取那一刻的数据),点击标题---》去了原链接

 

2 requests模块介绍

1 模拟发送http请求的模块---》不仅仅用来做爬虫,服务之间的调用也使用它
2 http请求请求头,请求体,请求地址都可以使用这个模块
3 requests是基于python urllib2模块封装的,这个模块用起来比较繁琐
4 安装:pip3 install requests

 

3 requests模块发送get请求




import requests
# 1 发送get请求
# res是响应对象,http响应封装了,响应体
# res=requests.get('https://www.cnblogs.com/xiaoyuanqujing/p/11805679.html')
# # 把响应体的数据转成了字符串
# print(res.text)


# 2 向百度发送请求
# res=requests.get('https://www.baidu.com/')
# # print(res.text)
# with open('baidu.html','wb') as f:
#     f.write(res.content) # 响应体二进制内容


# 3 请求地址中携带数据
# 拼在路径中
# 没有带请求头:客户端类型
# 如果你发送请求去一个地址,拿的数据不对的原因是什么?你模拟的不像浏览器,把请求头的数据该带的带上
# user-agent,referer
# header={
#     'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
# }
# # res=requests.get('https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3',headers=header)
# # 使用params来传递get请求参数
# res=requests.get('https://www.baidu.com/s',params={'wd':'帅哥'},headers=header)
# # print(res.text)
# with open('baidu.html','wb') as f:
#     f.write(res.content) # 响应体二进制内容


# 4 请求头的使用
'''
user-agent,
referer
Cookie:未认证的cookie,认证过的cookie

'''
# 5 中文转码和编码
# from urllib.parse import urlencode,unquote

# 把中文转成%的形式
# params={'wd':'帅哥'}
# res=urlencode(params)
# print(res)
#
# # 把%形式转成中文
# res2=unquote(res)
# print(res2)


# 6 cookie的使用,正常是在请求头中
# cookie经常用,作者把cookies当作一个参数使用
# header={
#     'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
#
# }
# # Dict or CookieJar:是一个对象,登录成功以后拿cookie得到的就是一个cookieJar对象
# res=requests.get('https://www.baidu.com/s',params={'wd':'帅哥'},headers=header,cookies={''})
# # print(res.text)
# with open('baidu.html','wb') as f:
#     f.write(res.content) # 响应体二进制内容


 

4 requests模块发送post请求

# 1  模拟登录某网站

# import requests
#
# data = {
#     'username': '616564099@qq.com',
#     'password': 'lqz123',
#     'captcha': '9eee',
#     'ref': 'http://www.aa7a.cn/',
#     'act': 'act_login',
# }
# res = requests.post('http://www.aa7a.cn/user.php', data=data)
# print(res.text)
# # {"error":0,"ref":"http://www.aa7a.cn/"} 登录成功
# # 取到cookie--》登录成功的cookie
#
# # CookieJar 对象
# print(res.cookies.get_dict())
#
# res1 = requests.get('http://www.aa7a.cn/', cookies=res.cookies.get_dict())
#
# print('616564099@qq.com' in res1.text)



# 2 如何携带data数据,如何携带cookies:CookieJar或者字典




# 3 requests.session()
# import requests
# # 拿到一个session对象,发送请求时,跟使用reqesuts一样,只不过它自动处理了cookie
# session=requests.session()
# data = {
#     'username': '616564099@qq.com',
#     'password': 'lqz123',
#     'captcha': '9eee',
#     'ref': 'http://www.aa7a.cn/',
#     'act': 'act_login',
# }
# res = session.post('http://www.aa7a.cn/user.php', data=data)
# # print(res.text)
# # {"error":0,"ref":"http://www.aa7a.cn/"} 登录成功
# # 取到cookie--》登录成功的cookie
#
# # CookieJar 对象
# # print(res.cookies.get_dict())
#
# res1 = session.get('http://www.aa7a.cn/')
#
# print('616564099@qq.com' in res1.text)


## 携带json格式数据(自己回去尝试)
# import requests
# requests.post(url='',
#               json={'':1,},
#               ) #默认的请求头:application/json

 

5 requests模块响应对象



# 1 响应对象
# import requests
# respone=requests.get('http://www.jianshu.com')
# # respone属性
# print(respone.text)   # 把body体中数据转成字符串格式
# print(respone.content) # body体中的二进制格式
#
# print(respone.status_code) # 响应状态码
# print(respone.headers)     # 响应头
# print(respone.cookies)     # 响应的cookie,如果登录了,这个cookie就是登录的cookie
# print(respone.cookies.get_dict()) # cookiejar对象---》字典对象
# print(respone.cookies.items())   # 跟字典一样
#
# print(respone.url)             # 请求的地址
# print(respone.history)         # 列表,访问一个网址,重定向了,列表中放这两个地址
#
# print(respone.encoding)       # 响应的编码格式(一般都是utf-8)



# 如果是图片,视频,保存到本地
# response.iter_content(): 可以循环它,而不是循环response.content,循环它一点点存
# res=requests.get('xxx')
# for line in res.iter_content():
#     f.write(line)



#2 编码问题(一般不存在,如果存在)
# response.encoding='gb2312' # 改成网站编码方式即可
# import requests
# response=requests.get('http://www.autohome.com/news')
# response.encoding='gbk' #汽车之家网站返回的页面内容为gb2312编码的,而requests的默认编码为ISO-8859-1,如果不设置成gbk则中文乱码
# print(response.text)


# 3 获取二进制内容
# import requests
#
# response=requests.get('https://wx4.sinaimg.cn/mw690/005Po8PKgy1gqmatpdmhij309j070dgj.jpg')
#
# with open('a.jpg','wb') as f:
#     # f.write(response.content)
#     # 推荐用这个
#     for line in response.iter_content():
#         f.write(line)


# 4 json格式解码
# import requests
# # import json
# res=requests.get('https://api.luffycity.com/api/v1/course/actual/?category_id=1')
# # print(json.loads(res.text))
# print(res.json()['code'])

 

6 爬取视频

# 分析出爬取的地址是
https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=0
import requests
import re

res = requests.get('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=0')
# print(res.text)

video_ids = re.findall('<a href="(.*?)" class="vervideo-lilink actplay">', res.text)
# print(video_ids)
for video_id in video_ids:
   video_url = 'https://www.pearvideo.com/' + video_id
   # print(video_url)
   real_video_id = video_id.split('_')[-1]
   # print(real_video_id)
   # print(video_url)
   # res_detail=video_detail=requests.get(video_url)
   # print(res_detail.text)
   # break
   # 直接发送ajax请求,拿到json格式数据--》json格式数据中就有mp4
   header = {
       'Referer': video_url
  }
   res_json = requests.get('https://www.pearvideo.com/videoStatus.jsp?contId=%s' % real_video_id, headers=header)
   # print(res_json.json())
   mp4_url = res_json.json()['videoInfo']['videos']['srcUrl']
   mp4_url = mp4_url.replace(mp4_url.split('/')[-1].split('-')[0], 'cont-%s' % real_video_id)

   print(mp4_url)
   video_res = requests.get(mp4_url)
   name=mp4_url.split('/')[-1]
   with open('video/%s'%name, 'wb') as f:
       for line in video_res.iter_content():
           f.write(line)

# https://video.pearvideo.com/mp4/third/20210509/ cont-1728918 -15454898-094108-hd.mp4 能播放
# https://video.pearvideo.com/mp4/third/20210509/ 1621312234758 -15454898-094108-hd.mp4


# 线程池爬取视频
https://blog.csdn.net/qq_17273727/article/details/111026372

 

7 自动登录某网站

import requests
# 拿到一个session对象,发送请求时,跟使用reqesuts一样,只不过它自动处理了cookie
session=requests.session()
data = {
   'username': '616564099@qq.com',
   'password': 'lqz123',
   'captcha': '9eee',
   'ref': 'http://www.aa7a.cn/',
   'act': 'act_login',
}
res = session.post('http://www.aa7a.cn/user.php', data=data)
# print(res.text)
# {"error":0,"ref":"http://www.aa7a.cn/"} 登录成功
# 取到cookie--》登录成功的cookie

# CookieJar 对象
# print(res.cookies.get_dict())

res1 = session.get('http://www.aa7a.cn/')

print('616564099@qq.com' in res1.text)
posted @ 2021-06-17 16:23  DEJAVU_ERIC  阅读(100)  评论(0编辑  收藏  举报