数学建模社区-数学中国
标题:
Python爬虫常用小技巧之设置代理IP
[打印本页]
作者:
杨利霞
时间:
2021-1-8 17:22
标题:
Python爬虫常用小技巧之设置代理IP
5 V1 c# c" G, z$ X. b" ]7 L
Python爬虫常用小技巧之设置代理IP
' T' a/ O% X. f
$ {' e0 v: M) S1 X T, e$ T: W
设置代理IP的原因
6 \/ G# Z& C* K8 @; j! L( ?* d: i
我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站。假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,这样便不会出现因为频繁访问而导致禁止访问的现象。
D6 R9 Y6 f8 @, T/ P& v7 h& K: N6 A
我们在学习Python爬虫的时候,也经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败。高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以下面这篇文章讲述一个爬虫技巧,设置代理IP
3 E5 N2 f& K u, M A$ _
代理的获取有很多方式,网上有很多免费的可以去爬取一些试试,但是免费的代理使用起来也是 很吃力的。还有就是现在网上有很多的代理供应商,可以在网上寻找下,然后找家靠谱的使用。毕竟网络太大了,代理供应商肯定也是参差不齐的,所以找到合适的代理还是需要花点时间的。在这里我就是使用了我们长期使用的一家质量好的代理,亿牛云代理,而且是使用的他们的爬虫代理(动态转发)和一般的api模式不一样。这种更简单更方便,对于懒人来说绝对是最佳选择。
7 P* X }# ~ d5 K6 t$ x* J/ |: g
具体代码的使用
( ]( F1 ~. b3 g5 H8 W1 G' h
#! -*- encoding:utf-8 -*-
$ r2 @5 N3 V6 x$ d: z7 ~
' N' J2 Y" e0 t9 o) \' u! u
import requests
6 P0 ^" u# I4 g
import random
; B* l( n) l1 H3 w1 N2 `8 e6 R L8 R
8 }1 V, Z8 ?0 b# v/ c
# 要访问的目标页面
{" f* B% X' I0 T0 g
targetUrl = "http://httpbin.org/ip"
" l+ ]3 U0 s" S/ ]* L$ A
( Z% Y4 d5 @ w4 P
# 要访问的目标HTTPS页面
8 p6 o; d& V. v/ u# `9 q: |
# targetUrl = "https://httpbin.org/ip"
. p: f- a6 r; i! }
0 b8 X6 o. P6 C5 s
# 代理服务器
- g2 v( A' q3 _/ D( r
proxyHost = "t.16yun.cn"
6 C `- L# D, R" P' s' k
proxyPort = "31111"
1 |* B3 Y* G" R" X2 G% M
' D; G, l. U' x' s5 x/ Y5 L
# 代理隧道验证信息
- S+ J! A$ Q' H1 N7 O: q
proxyUser = "username"
+ X2 O( n O; c
proxyPass = "password"
8 q! |& q- t* j, I3 ^
0 b# M: ^& \& m! y
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
: }, K0 }% X X/ _% A: ` U, [; n
"host" : proxyHost,
* k$ F+ y( _0 S1 k& z4 z* N
"port" : proxyPort,
! @% Z# n4 u9 d9 h6 @4 ?4 q
"user" : proxyUser,
) ]' j2 i! x) y. P; ^, M f) \
"pass" : proxyPass,
8 Z( X: h; p4 t6 s/ F3 [9 S
}
- q. i, K7 i) u, ]) O$ o
$ q7 A; Z3 Z8 h
# 设置 http和https访问都是用HTTP代理
6 \% N3 i: B8 R7 ]' D, j* M
proxies = {
+ H) v A% O B! t# S. a
"http" : proxyMeta,
1 ~7 H% G9 ]: F0 ^0 k* m
"https" : proxyMeta,
7 X, d$ l2 {0 A8 d v% K2 S
}
}+ \ F& K" B0 D+ ^- y9 C( E& B
) w* S7 O7 T* r8 S8 f
5 I& h# T% ?9 \# G
# 设置IP切换头
g6 I& w; ^% L R! \; I( c
tunnel = random.randint(1,10000)
* X" K: d( b# W
headers = {"Proxy-Tunnel": str(tunnel)}
9 a. [, Q, L( c4 F2 o
resp = requests.get(targetUrl, proxies=proxies, headers=headers)
/ F2 @! T5 z+ T- E! }
& t) | g: P( n( r S* F7 ~
print resp.status_code
" y3 m5 p4 d* D: R9 T
print resp.text
5 q6 U6 k/ v, q5 f- C
总结
; s5 ^/ H1 q# ]. L
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流
6 l s9 L5 W, _3 ~) [. r
4 s' ~5 T. a$ Z
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5