2-爬虫-代理池搭建、代理池使用(搭建django后端测试)、爬取某视频网站、爬取某视频网站、bs4介绍和遍历文档树

news2024/11/24 2:07:06

1 代理池搭建
2 代理池使用
2.1 搭建django后端测试

3 爬取某视频网站
4爬取某视频网站
5 bs4介绍和遍历文档树

1 代理池搭建

# ip代理
	-每个设备都会有自己的IP地址
    -电脑有ip地址---》访问一个网站---》访问太频繁---》封ip
    
    -收费:靠谱稳定--提供api
    -免费:不稳定--自己写api用
    	-开源的:https://github.com/jhao104/proxy_pool
    		免费代理---》爬取免费代理---》验证---》存到redis中
            flask搭建web---》访问某个接口,随机获取ip
            
            
    
# 搭建步骤:
	1 git clone git@github.com:jhao104/proxy_pool.git
    2 pycharm中打开
    3 安装依赖:创建虚拟环境  pip install -r requirements.txt
    4 修改配置文件: DB_CONN = 'redis://127.0.0.1:6379/0'
    5 运行调度程序和web程序
        # 启动调度程序
        python proxyPool.py schedule

        # 启动webApi服务
        python proxyPool.py server

   6 api介绍
    /	GET	api介绍	None
    /get	GET	随机获取一个代理	可选参数: ?type=https 过滤支持https的代理
    /pop	GET	获取并删除一个代理	可选参数: ?type=https 过滤支持https的代理
    /all	GET	获取所有代理	可选参数: ?type=https 过滤支持https的代理
    /count	GET	查看代理数量	None
    /delete	GET	删除代理	?proxy=host:ip
        
        
 # http和https代理
	-以后使用http代理访问http的地址
    -使用https的代理访问https的地址

2 代理池使用

"公网""内网" 是网络术语,用于描述不同的网络范围和可访问性。以下是它们的定义和示例:

**公网 (Internet)**:
	- **定义:** 公网是指全球范围的互联网,连接了世界各地的计算机、服务器和设备,
		允许它们通过因特网协议(IP)进行通信。
	- **示例:** 
	  - 当您使用浏览器访问网站,例如 Google、Facebook 或 Twitter,
		您是通过公网与这些网站的服务器通信。
	  - 电子邮件发送和接收也是通过公网进行的,例如使用 Gmail 或 Outlook 邮箱。
	  - 在社交媒体上与全球范围内的朋友互动,如发布推文、分享照片或发布视频。

**内网 (Intranet)**:
	- **定义:** 内网是指一个私有网络,通常在组织、公司或机构内部使用,
		用于内部通信、数据共享和资源管理。它通常不直接连接到公网。
	- **示例:** 
	  - 企业内部网络:大多数组织都有内部网络,用于员工之间的通信和共享内部资源。
	 	这些网络可以包括内部网站、文件共享和内部电子邮件系统。
	  - 家庭网络:在家庭网络中,您可以有多个设备(例如台式电脑、笔记本电脑、智能手机、
	  	智能家居设备等)连接到一个本地路由器,形成一个内部网络。
	  	这个内部网络允许这些设备共享文件、打印机和互联网连接,但通常不会直接暴露给公网。

在这两个示例中,公网是全球范围的互联网,而内网是限定在特定组织或家庭的私有网络。
内网通常需要特定的访问权限才能连接到公网,并且通常通过防火墙或路由器进行保护,以确保安全性和隐私。

在这里插入图片描述

2.1 搭建django后端测试

import requests
res = requests.get('http://192.168.1.252:5010/get/?type=http').json()['proxy']
proxies = {
    'http': res,
}
print(proxies)
# 我们是http 要使用http的代理
respone = requests.get('http://139.155.203.196:8080/', proxies=proxies)
print(respone.text)

ds-1698993940761)

# 步骤:
	1 写个django,只要访问,就返回访问者ip
    2 部署在公网上---》python manage.py runserver 0.0.0.0:8000
    3 本机使用代理测试
    import requests
    res1 = requests.get('http://192.168.1.63:5010/get/?type=http').json()
    dic = {'http': res1['proxy']}
    print(dic)
    res = requests.get('http://47.93.190.59:8000/', proxies=dic)
    print(res.text)
    
    
    
    
# 补充:
	代理有 透明和高匿
    透明的意思:使用者最终的ip是能看到的
    高匿:隐藏访问者真实ip,服务端看不到

3 爬取某视频网站

# 目标:
	爬取该网站的视频,保存到本地  https://www.pearvideo.com/ 
        
import requests
import re

# 请求地址是:
# https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0
res = requests.get('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0')
# print(res.text)
# 解析出视频地址---》正则
video_list = re.findall('<a href="(.*?)" class="vervideo-lilink actplay">', res.text)
# print(video_list)
for video in video_list:
    video_id = video.split('_')[-1]
    url = 'https://www.pearvideo.com/' + video
    print(url)  # 向视频详情发送请求---》解析出页面中mp4视频地址---》直接下载即可
    header = {
        'Referer': url
    }
    res_json = requests.get(f'https://www.pearvideo.com/videoStatus.jsp?contId={video_id}&mrd=0.14435938848299434',
                            headers=header).json()
    mp4_url = res_json['videoInfo']['videos']['srcUrl']
    real_mp4_url = mp4_url.replace(mp4_url.split('/')[-1].split('-')[0], 'cont-%s' % video_id)
    print(real_mp4_url)
    # 把视频保存到本地
    res_video = requests.get(real_mp4_url)
    with open('./video/%s.mp4' % video_id, 'wb') as f:
        for line in res_video.iter_content(1024):
            f.write(line)

# res=requests.get('https://www.pearvideo.com/video_1526860')
# print(res.text)

# 第一层反扒:需要携带referfer
# header = {'Referer': 'https://www.pearvideo.com/video_1527879'}
# res = requests.get('https://www.pearvideo.com/videoStatus.jsp?contId=1527879&mrd=0.14435938848299434', headers=header)
# print(res.text)


# 反扒二:
# https://video.pearvideo.com/mp4/adshort/20190311/   1698982998222  -13675354_adpkg-ad_hd.mp4  返回的
# https://video.pearvideo.com/mp4/adshort/20190311/   cont-1527879   -13675354_adpkg-ad_hd.mp4   能播的
# s = 'https://video.pearvideo.com/mp4/adshort/20190311/1698982998222-13675354_adpkg-ad_hd.mp4'
# print(s.replace(s.split('/')[-1].split('-')[0], 'cont-1527879'))

4 爬取新闻

# 没有一个解析库---》用正则---》解析库--》html/xml
import requests
# pip install BeautifulSoup4
from bs4 import BeautifulSoup

res = requests.get('https://www.autohome.com.cn/news/1/#liststart')
# print(res.text)
# 找到页面中所有的类名叫article  ul标签
soup = BeautifulSoup(res.text, 'html.parser')
# bs4的查找
ul_list = soup.find_all(class_='article', name='ul')  # 所有的类名叫article  ul标签
print(len(ul_list))
# 循环再去没一个中,找出所有li
for ul in ul_list:
    li_list = ul.find_all(name='li')
    for li in li_list:
        h3 = li.find(name='h3')
        if h3:
            title = h3.text
            url = 'https:' + li.find(name='a')['href']
            if url.startswith('//'):
                url = 'https:' + url
            desc = li.find(name='p').text
            reade_count = li.find(name='em').text
            img = li.find(name='img')['src']

            print(f'''
            文章标题:{title}
            文章地址:{url}
            文章摘要:{desc}
            文章阅读数:{reade_count}
            文章图片:{img}
            ''')


# 爬5页--->把图片保存到本地--->把打印的数据存储到mysql中--》建个表

5 bs4介绍和遍历文档树

# BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库,解析库
# pip install beautifulsoup4
from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b><span>lqz</span></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""
soup = BeautifulSoup(html_doc, 'html.parser')  # 解析库可以使用 lxml,速度快(必须安装)   可以使用python内置的 html.parser

# print(soup.prettify())

-----重点:遍历文档树----------
#遍历文档树:即直接通过标签名字选择,特点是选择速度快,但如果存在多个相同的标签则只返回第一个
#1、用法  通过  .  遍历
# res=soup.html.head.title
# res=soup.p
# print(res)
#2、获取标签的名称
# res=soup.html.head.title.name
# res=soup.p.name
# print(res)
#3、获取标签的属性
# res=soup.body.a.attrs  # 所有属性放到字典中 :{'href': 'http://example.com/elsie', 'class': ['sister'], 'id': 'link1'}
# res=soup.body.a.attrs.get('href')
# res=soup.body.a.attrs['href']
# res=soup.body.a['href']
# print(res)

#4、获取标签的内容
# res=soup.body.a.text  #子子孙孙文本内容拼到一起
# res=soup.p.text
# res=soup.a.string  # 这个标签有且只有文本,才取出来,如果有子孙,就是None
# res=soup.p.strings
# print(list(res))

#5、嵌套选择


# 下面了解
#6、子节点、子孙节点
# print(soup.p.contents) #p下所有子节点
# print(list(soup.p.children)) #得到一个迭代器,包含p下所有子节点
# print(list(soup.p.descendants)) #获取子子孙节点,p下所有的标签都会选择出来

#7、父节点、祖先节点
# print(soup.a.parent) #获取a标签的父节点
# print(list(soup.a.parents) )#找到a标签所有的祖先节点,父亲的父亲,父亲的父亲的父亲...
#8、兄弟节点
# print(soup.a.next_sibling) #下一个兄弟
# print(soup.a.previous_sibling) #上一个兄弟
#
print(list(soup.a.next_siblings)) #下面的兄弟们=>生成器对象
# print(soup.a.previous_siblings) #上面的兄弟们=>生成器对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1168099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NOIP2023模拟10联测31 涂鸦

题目大意 有一面由 n m n\times m nm个格子组成的墙&#xff0c;每个格子要么是黑色&#xff0c;要么是白色。你每次将会进行这样的操作&#xff1a;等概率随机选择一个位置 ( x , y ) (x,y) (x,y)和一个颜色 c c c&#xff08;黑色或白色&#xff09;&#xff0c;&#xff0…

Portraiture4.1.2最新中文汉化版

提起PS后期修图人像美白磨皮&#xff0c;大家会想到各种磨皮工具&#xff0c;其中Portraiture这款磨皮效率超高&#xff0c;是99%摄影师的必备插件&#xff0c;一秒磨皮&#xff0c;无卡顿&#xff0c;效果好&#xff01;人像摄影师人均一款&#xff0c;磨皮质感非常好&#xf…

ER图:改变你数据库设计流程的神器!

在现今数据驱动的世界中&#xff0c;数据库设计扮演了至关重要的角色。为了实现有效且准确的数据存储和检索&#xff0c;企业们开始倾向于采用实体关系图&#xff08;Entity-Relationship Diagram&#xff0c;简称ER图&#xff09;来优化他们的数据库设计流程。本文将带你走进E…

Rust编程基础之条件表达式和循环

1.if表达式 if 表达式允许根据条件执行不同的代码分支, 以下代码是一个典型的使用if表达式的例子: fn main() {let number 3; ​if number < 5 {println!("condition was true");} else {println!("condition was false");} } 所有的 if 表达式都以…

win10 + vs2017 + cmake3.17编译OSG-3.4.1

参考教程&#xff1a;https://blog.csdn.net/bailang_zhizun/article/details/120992244 1. 下载与解压 2. 修改configure 1&#xff09;Ungrouped Entries -- 》ACTUAL_3RDPARTY_DIR: 设置为&#xff1a; D:/Depend_3rd_party/OSG341/3rdParty 2&#xff09; Ungrouped E…

免费的 AI 视频生成工具 Moonvalley 厉害了!Moonvalley 怎么用(保姆级教程)

一、Moonvalley 介绍 Moonvalley&#xff0c;号称地表最强的 AI 视频生成工具&#xff0c;到底有多厉害&#xff1f;今天一起来看一下~ 这是 Moonvalley 官网的介绍&#xff1a; Moonvalley 是一个开创性的新型文本到视频的生成式 AI 模型。用简单的文本即可创建出惊人的电影和…

分享一个自己写的免费的微信聊天记录提取软件 2023.11.03

有什么办法可以导出与某个人的微信聊天记录&#xff1f; 只想导出与某个微信好友的聊天记录&#xff0c;有办法做到吗&#xff1f;导出所有的话&#xff0c;文件太大了&#xff0c;只想导出与其中一个人的&#xff0c;求大神教。 我的需求和上面这个人的比较类似&#xff0c;因…

2023辽宁省数学建模竞赛选题建议及AB题思路

大家好呀&#xff0c;今天早上2023年辽宁省大学生数学建模竞赛开赛&#xff0c;在这里给大家带来初步的选题建议及思路。 注意&#xff0c;本文只是比较简略的图文版讲解&#xff0c;完整的视频版讲解请移步&#xff1a; 2023辽宁省数学建模竞赛选题建议及初步思路_哔哩哔哩_…

【面经】讲一下synchronized锁升级的过程

synchronized锁升级是指从偏向锁到轻量级锁&#xff0c;再到重量级锁的过程。 当线程获取synchronized对象时&#xff0c;首先会进行偏向锁的尝试。 如果偏向锁没有竞争&#xff0c;线程将永远不需要同步。 但是&#xff0c;如果偏向锁竞争失败&#xff0c;将升级到轻量级锁。…

python自动化测试模板

1:准备html模版 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>接口自动化…

数据库管理-第114期 Exadata 05-ESS-上(202301103)

数据库管理-第114期 Exadata 05-ESS-上&#xff08;202301103&#xff09; 之前提到过&#xff0c;Exadata通过ESS将存储转换为了智能存储&#xff0c;其实相较于纸面参数非常牛逼但性能还是比不过Exadata的国产一体机&#xff0c;最大的差距也就是在ESS上&#xff0c;从数据库…

自动化测试如何准备测试数据

其实大部分类型的测试都需要去准备测试数据。 手工测试&#xff1a;一些基础数据&#xff0c;比如配置数据等等是需要去准备的&#xff1b;自动化测试&#xff1a;基础需要准备&#xff0c;现有数据&#xff0c;动态运行时产生的数据是需要准备的&#xff1b;性能测试&#xf…

华为云API Explorer伙伴招募火热进行中~

API编排新特性助力伙伴 零代码构建API工作流 实现快速集成场景编排能力 面向三大核心场景&#xff1a; API调用逻辑频繁改动 API间高耦合不便管理 复杂API解决方案难构建 伙伴加入可立享四大限时福利&#xff1a; 免费试用、专家咨询、技术指导、生态支持 点此报名>&…

XSpirit 2智能边缘计算机使用测评

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 拆箱过程介绍视频使用感受 我之前就参加过 Spirit 1 第一代智能边缘计…

Web自动化测试 —— PageObject设计模式!

一、page object 模式简介 1.1、传统 UI 自动化的问题 无法适应 UI 频繁变化无法清晰表达业务用例场景大量的样板代码 driver/find/click 二、page object 设计原则 2.1、POM 模式的优势 降低 UI 变化导致的测试用例脆弱性问题让用例清晰明朗&#xff0c;与具体实现无关 2.…

人工智能AI创作系统ChatGPT网站系统源码+AI绘画系统支持GPT4.0/支持Midjourney局部重绘

一、前言 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建…

压缩软件 7-Zip VS WinZips

7-zip在联想应用商店给强烈推荐&#xff1f; 要说它好用还行&#xff0c;但每次压缩都显示网络连接失败等异常广告信息。 相反好用的7-ZIP必须鼠标点击右键点击更多才能够看到&#xff0c;这次更新体验也太差了吧&#xff1f; 用户放在第一位&#xff1f; 要不是更新后一直推…

【技术分享】RK356X Android 使用 libgpiod 测试gpio

前言 libgpiod 是用于与 Linux GPIO 字符设备交互的 C 库和工具库&#xff1b;此项目包含六种命令行工具&#xff08;gpiodetect、gpioinfo、gpioset、gpioget、gpiomon&#xff09;&#xff0c;使用这些工具可以在命令行设置和获取GPIO的状态信息&#xff1b;在程序开发中也可…

Python库学习(十二):数据分析Pandas[下篇]

接着上篇《Python库学习(十一):数据分析Pandas[上篇]》,继续学习Pandas 1.数据过滤 在数据处理中&#xff0c;我们经常会对数据进行过滤&#xff0c;为此Pandas中提供mask()和where()两个函数&#xff1b; mask(): 在 满足条件的情况下替换数据&#xff0c;而不满足条件的部分…

BUUCTF 另外一个世界 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;解压得到一个.jpg图片。 密文&#xff1a; 解题思路&#xff1a; 1、这道题我尝试了很多方法&#xff0c;知道看了别人的wp才知道flag在我忽略的地方。将图片在010 Editor中打开&#xff0c;从…