网络代理用途

 

 

网络代理的用途广泛,常用于代理爬虫,代理VPN ,代理注入等。使用网络 代理能够将入侵痕迹进一步减少,能够突破自身IP的访问限制,提高访问速度, 以及隐藏真实IP ,还能起到一定的防止攻击的作用。下面将介绍如何使用Python  代理进行访问,以及代理爬虫的使用。

Python的代理有多种用法,本节介绍常见的几种:Urllib代理、requests代 理。

Urllib代理的设置包括设置代理的地址和端口,访问测试的网址进行测试,会 返回访问的IP地址,如果返回的IP是代理IP ,则说明是通过代理访问的。示例代  码如下:

 

from urllib.error import URLError

from urllib.request import ProxyHandler,build_opener

proxy='127.0.0.1 :1087'                          # 代理地址

proxy_handler=ProxyHandler({

'http ' : 'http:// '+proxy,

'https ' : 'https:// '+proxy

})

opener=build_opener(proxy_handler)

try:

response = opener .open( 'http://httpbin .org/get ') print(response .read() .decode( 'utf-8 '))

except URLError as e:

print(e .reason)

 

 

 

 

 

 

 

#

 

 

 

 

 

 

 

 

测试IP的网址

运行结果如下所示:

 

 

 

 

 

dc807d86057440c4995f329407d8d36f.png

requests代理设置包括设置代理的IP地址和端口,访问测试页面,通过测试页 面的返回值判断是否为通过代理访问。示例代码如下:

 

# requests代理设置

import requests

proxy='127.0.0.1 :1087'  # 代理地址

proxies={

'http ' : 'http:// '+proxy,

'https ' : 'https:// '+proxy

}

try:

response=requests.get('http://httpbin.org/get ',proxies=proxies)

print(response .text)

except requests .exceptions .ConnectionError as e:

print( 'error: ',e .args)

运行结果与Urllib代理相同。

付费代理的使用方法与普通代理的一样,仅仅需要修改proxy的值,在代理IP 地址前加上“用户名:密码@” 即可。示例代码如下:

 

proxy= 'username:password@IP:port '

下面来看一个代理应用的案例:爬取某电影评论。

首先,找到一个获取电影评论的接口,如下所示:

 

 

 

 

 

 

 

http://m .×××××× .com/mmdb/comments/movie/1200486 .json? v  =yes&offset=

0&startTime=2018-010-20%2022%3A25%3A03

 

分析一下这个接口的参数信息,可以发现1200486是指电影的唯一识别ID。 startTime对应获取到的评论截止时间,从截止时间向前获取15条评论。

分析好后就可以开始编写脚本了,步骤如下:

1)使用requests库的代理方法进行接口访问,代码如下:

'127.0.0.1 :1087'

= {

'http ' : 'http:// ' + proxy,

'https ' : 'https:// ' + proxy

}

2)设置代理地址和端口,让之后的链接都通过此代理来绕过可能存在的反 爬虫工具:

headers = {

'User-Agent ' : 'Mozilla/5 .0 (Macintosh; Intel Mac OS X 10_14_6)

AppleWebKit/537 .36 (KHTML, like Gecko) Chrome/76 .0 .3809 .100

Safari/537 .36 '

}

3)设置一个UA ,也可以设置多个UA ,每次访问时随机抽取UA来避免被检 测:

 

try:

print(url)

response = requests .get(url,headers=headers, proxies=proxies, timeout=3) if response .status_code == 200:

print(response .text)

return response .text

return None

except requests .exceptions .ConnectionError as e:

print( 'error: ', e .args)

4)访问接口URL并判断访问是否成功,若成功,则将数据返回,效果如下 所示:

9546100b2d8e463fa48638ac6bef5718.png

5)可以看到,已经成功获取到了数据,但是数据的格式还是原始接口返回 的格式,里面的数据并非都是我们想要的数据。所以再写一个数据优化的方法, 传入原始数据进行处理,并将处理后的结果返回:

 

 

 

 

 

 

def parse_data(html) :

data = json .loads(html)[ 'cmts ']

comments = []

for item in data:

comment = {

'id ' : item[ 'id '],

'nickName ' : item[ 'nickName '],

'cityName ' : item[ 'cityName '] if 'cityName ' in item else ' ',

'content ' : item[ 'content '] .replace( '\n ', ' ', 10),

'score ' : item[ 'score '],

'startTime ' : item[ 'startTime ']

}

comments .append(comment)

return comments

 

运行效果如下所示:

6583f943f5684b01a9f87e48fe8726bd.png

6)可以看到,数据已经处理完成了,接下来进行循环和保存。获取评论时 应该从当前时间向前爬取,所以先获取当前时间:

start_time = date time .now() .strftime( '%Y-%m-%d %H:%M:%S ')

7)设置截止时间为上映时间,再往前就没有评论了,循环爬取到截止时间 点后停止爬取:

 

end_time = '上映时间 '

8)需要循环判断获取的时间是否小于截止的时间点,小于则代表是最早的 评论,爬取完成:

while start_time > end_time:

url = 'http://m .×××××× .com/mmdb/comments/movie/1203084 .json?

 v  =yes&offset=0&startTime= ' + start_time .replace( ' ', '%20 ')

try:

html = get_data(url)    # 获取数据

except Exception as e:

time .sleep(0 .5)

html = get_data(url)

else:

9)每次循环获取的末尾评论时间为下次开始时间时,继续向前获取,再将 数据进行处理并保存即可:

 

 

 

 

 

 

 

comments = parse_data(html)

print(comments)

start_time = comments[14][ 'startTime ']  # 获得末尾评论的时间

start_time = date time .s trptime(start_time, '%Y-%m-%d %H:%M:%S ') +

timedelta(seconds=-1)

start_time = date time .strftime(start_time, '%Y-%m-%d %H:%M:%S ')

 

 

for item in comments:

with open( 'data .txt ', 'a ', encoding= 'utf-8 ') as f : f.write(str(item[ 'id '])+ ', '+item[ 'nickName '] + item[ 'cityName '] + ', ' + item[ 'content '] +

 

 

+

+

 

 

使用代理爬取数据便完成了,效果如下所示:

caa4d2d4129245058d966017b8e8ce95.png

 

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

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

相关文章

ROS方向第二次汇报(2)

文章目录 1.本方向内学习内容:1.1.动作:1.1.1.案例接口定义:1.1.2.案例通信模型:1.1.3.服务器端代码:1.1.4.客户端源代码:1.1.5.动作命令行操作: 1.2.参数:1.2.1.查看参数列表:1.2.2…

dvwa靶场xss储存型

xss储存型 xxs储存型lowmessage框插入恶意代码name栏插入恶意代码 medium绕过方法 high xxs储存型 攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。产生层面:后端漏洞特征:持久性的、前端执行、储存在后端数据…

4JS表达式和运算符expression and operator

表达式(expression)JavaScript中的一个短语,JavaScript解释器会将其计算(evaluate)出一个结果。程序中的常量是最简单的一类表达式。变量名也是一种简单的表达式,它的值就是赋值给变量的值。复杂表达式是由…

类与对象(中篇)

1、类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 2、构造函数---初始…

Java技术栈 —— Spring MVC 与 Spring Boot

参考文章或视频链接[1] Spring vs. Spring Boot vs. Spring MVC[2] Key Differences Between Spring vs Spring Boot vs Spring MVC

CRM系统主要干什么的

阅读本文,你将了解:一、CRM系统是什么;二、CRM系统主要干什么的;三、CRM系统在企业管理中的重要作用;四、企业落地案例分享——大吉包装。 本文所提及的功能演示和图片内容均来自于我们公司正在使用的简道云CRM系统&a…

【JVM】类加载流程

目录 1.加载 2.链接 (1)校验 (2)准备 (3)解析 3.初始化 4.使用 5.卸载 1.加载 加载阶段,简言之,查找并加载类的二进制数据,生成 Class 的实例 在加载类时&#x…

【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

目录 1 -> 引用 1.1 -> 引用概念 1.2 -> 引用特性 1.3 -> 常引用 1.4 -> 使用场景 1.5 -> 传值、传引用效率比较 1.6 -> 值和引用作为返回值类型的性能比较 1.7 -> 引用和指针的区别 2 -> 内联函数 2.1 -> 概念 2.2 -> 特性 3 -…

Linux ---- Shell编程三剑客之AWK

一、awk处理文本工具 1、awk概述 awk 是一种处理文本文件的语言,是一个强大的文本分析工具。AWK是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作。用来处理列。数据可以来自标准输入也可以是管道或文件。…

共享的IP隔一段时间就变?用这种方法可以不需要知道电脑IP

前言 一般来说,电脑接入路由器之后,IP是由路由器自动分配的(DHCP),但如果隔一段时间不开机连接路由器,或者更换了别的网卡进行连接,自动分配的IP就会更改。 比如你手机连接着电脑的共享IP:192.168.1.10,但过段时间之后,电脑的IP突然变成了192.168.1.11,那么你的所有…

Qt+css绘制标题

之前学过html和小程序,帮老师做项目的时候也用过vue,在想qt绘制界面是不是也可以使用css,然后查了一些资料,绘制了一个标题,准备用到智能家居的上位机上面。 成果 源码 重写了paintEvent函数和TimeEvent函数,一个用于绘…

幻兽帕鲁服务器多少钱一个?26元,阿里云腾讯云华为云

2024年幻兽帕鲁服务器价格表更新,阿里云、腾讯云和华为云Palworld服务器报价大全,4核16G幻兽帕鲁专用服务器阿里云26元、腾讯云32元、华为云26元,阿腾云atengyun.com分享幻兽帕鲁服务器优惠价格表,多配置报价: 幻兽帕鲁…

透明拼接屏造型:多样拼接与影响因素

透明拼接屏,以其独特的透明显示效果和灵活的拼接方式,在现代显示领域中独树一帜。其造型多样,包括横屏拼接、竖屏拼接、异形拼接以及定制拼接等多种方式,满足了不同场景和应用的需求。尼伽小编将详细介绍这些拼接方式,…

PR转场模板|超级炫酷故障特效电影游戏视频转场PR模板剪辑素材

premiere转场,包含200个带有Sound FX的独特视频转场效果。加强剪辑视频视觉效果,在镜头之间的剪辑和添加文字动画! MYFX Extension可帮助您一键浏览和应用预设!可以喜爱预设,并拥有自己亲手挑选的库。如果您有任何问题…

字符数组的学习

前言: 在前面我们介绍过字符型数据是以字符的ASCII码储存在存储单元中,一般占一个字节,由于 ASCII码也属于整数类型,因此在C99标准中把字符类型归纳为整数类型中的一种,由于字符数据 的应用比较广泛,尤其…

抽象类(Java)、模板方法设计模式

一、概念 在Java中有abstract关键字,就是抽象的意思,可用来修饰类和成员方法。 用abstract来修饰类,那这个类就是抽象类;修饰方法,那这个方法就是抽象方法。 修饰符 abstract class 类名{修饰符 abstract 返回值类型…

【数据结构 02】队列

一、原理 队列通常是链表结构,只允许在一端进行数据插入,在另一端进行数据删除。 队列的特性是链式存储(随机增删)和先进先出(FIFO:First In First Out)。 队列的缺陷: 不支持随机…

看员工聊天记录,监控员工电脑聊天记录软件有哪些?

企业监控员工电脑聊天记录软件是指企业为了管理员工、提高工作效率和保护公司机密而采取的一种技术手段。随着互联网的发展和普及,员工在工作时间内使用聊天工具进行沟通已经成为常态,因此企业需要一种有效的方式来监控和管理员工的聊天记录。 为什么要监…

【算法与数据结构】198、213、337LeetCode打家劫舍I, II, III

文章目录 一、198、打家劫舍二、213、打家劫舍 II三、337、打家劫舍III三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、198、打家劫舍 思路分析:打家劫舍是动态规划的的经典题目。本题的难点在于递归公式…

机器学习 | 掌握线性回归的实战技巧

目录 初识线性回归 损失和优化 欠拟合与过拟合 正则化线性模型 模型的保存与加载 初识线性回归 线性回归(Linearregression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。特点是:有一个自变量的情况称为单…