爬虫的基本原理、requests模块、模拟登陆网站、爬取视频网站、cookie池和代理池、正向代理和反向代理

1、爬虫的定义:

  向网站发起请求,获取资源后分析并提取有用数据的程序

2、爬虫的基本流程

  (1)发送请求:

    使用http库向目标站点发起http请求,即发送一个Request Request包含:请求头、请求体等

  (2)获取响应内容:

    如果服务器能正常响应,则会得到一个Response Response包含:html,json,图片,视频等

  (3)解析内容:

    解析html数据:正则表达式,第三方解析库如Beautifulsoup,pyquery等 解析json数据:json模块 解析二进制数据:以b的方式写入文件

  (4)保存数据:

    数据库 文件

3、cookie池和代理池:

  cookie池:可能某些网站设置了访问的频率限制,用来模拟不同的用户进行访问

  代理池:用来模拟不同的ip用户对网站进行访问

4、正向代理和反向代理:

  正向代理:代理自己,例如FQ(访问谷歌):向某个服务器发请求,服务器再向谷歌发请求,请求数据再返回给自己。

  反向代理:向服务器发请求(一个ip地址),发送到nginx(反向代理服务器),再发送到后台服务器上(可能有很多台,但看看起来就是一台)。

5、模拟登陆:

复制代码
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
}
# 登录的post请求,以及携带的参数
res = requests.post(
    'http://www.aa7a.cn/user.php',
    headers=headers,
    data={
'username':'1640808365@qq.com',
'password':'147258369..',
'captcha': 'ubw3',
'remember': 1,
'ref': 'http://www.aa7a.cn/',
'act': 'act_login'
    })
# 登录成功请求结果中得到的cookies
cookie = res.cookies.get_dict()
# 验证登录成功的请求页面是否包含登录信息
res = requests.post('http://www.aa7a.cn/', headers=headers, cookies=cookie)
if '1640808365@qq.com' in res.text:
    print('登陆成功!')
else:
    print('登录失败!')
复制代码

 

6、 爬取梨视频案例:

复制代码
import re
# 爬取梨视频步骤:
# 1.先获取要爬取内容的目标url
# https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=3&start=36&mrd=0.762001536578264&filterIds=1625871,1625877,1625918,1625694,1625682,1625684,1625687,1625674,1625664,1625661,1625648,1625645,1625634,1625614,1625604
# 2.分析需要得到的链接
res = requests.get('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=3&start=36')
# 3.利用正则得到想要匹配的内容
# <a href="video_1625614" class="vervideo-lilink actplay">
reg_txt = '<a href="(.*?)" class="vervideo-lilink actplay">'
obj = re.findall(reg_txt, res.text)
# print(obj)
# 4.拼接需要访问的路径:如:https://www.pearvideo.com/video_1625614
for url in obj:
    res_url = 'https://www.pearvideo.com/'+url
    # 得到的视频页面
    res_v = requests.get(res_url)
    # 5、匹配到最终的视频地址(列表)
    obj_v = re.findall('srcUrl="(.*?)"', res_v.text)
    # print(obj_v)
    obj1 = requests.get(obj_v[0])
    # 切分出视频名称
    name = obj_v[0].rsplit('/', 1)[1]
    print(name)
    # 循环写入文件中,iter_content():二进制流
    with open(name, 'wb') as f:
        for line in obj1.iter_content():
            f.write(line)
复制代码

 

posted @   1640808365  阅读(336)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
主题色彩