数学建模社区-数学中国

标题: Python爬虫常用小技巧之设置代理IP [打印本页]

作者: 杨利霞    时间: 2021-1-8 17:22
标题: Python爬虫常用小技巧之设置代理IP
# j0 z5 a  n+ q: C/ x  `
Python爬虫常用小技巧之设置代理IP
4 ]+ Q* V& [6 }/ D- n
4 u1 c# c2 h+ @5 M4 O( b
设置代理IP的原因
& \' M; {- d+ G5 l! H我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站。假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,这样便不会出现因为频繁访问而导致禁止访问的现象。( q1 s, h  j0 ^" T, z2 B
我们在学习Python爬虫的时候,也经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败。高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以下面这篇文章讲述一个爬虫技巧,设置代理IP
2 B) `0 O; R* @( I代理的获取有很多方式,网上有很多免费的可以去爬取一些试试,但是免费的代理使用起来也是 很吃力的。还有就是现在网上有很多的代理供应商,可以在网上寻找下,然后找家靠谱的使用。毕竟网络太大了,代理供应商肯定也是参差不齐的,所以找到合适的代理还是需要花点时间的。在这里我就是使用了我们长期使用的一家质量好的代理,亿牛云代理,而且是使用的他们的爬虫代理(动态转发)和一般的api模式不一样。这种更简单更方便,对于懒人来说绝对是最佳选择。* F  I6 I2 a3 t$ g; i, {0 Z5 {
具体代码的使用0 k% ~+ a6 Z) ~. {, e) [) u9 Z
#! -*- encoding:utf-8 -*-
4 Q+ `/ d) ]" U2 }( S' T/ K
1 c+ e! m; [1 u) ^        import requests" M% \4 e# X$ A( J3 P% c: ^& R
        import random
, k1 A* k: P4 ]3 U8 S+ z: |$ w! c$ u
+ G8 V) q7 k" B$ R6 N7 `! W        # 要访问的目标页面% q' x& s2 E, U2 r* [
        targetUrl = "http://httpbin.org/ip"  {, e) T6 D3 S" f  S0 F5 w& e
) f) i3 Q$ F/ G/ f4 T
        # 要访问的目标HTTPS页面
: w. I$ R" k& j$ \; ]        # targetUrl = "https://httpbin.org/ip"
& e3 G9 E' @0 q. q8 I  ]$ K. V2 e2 g" U0 z0 M
        # 代理服务器
: j+ o  V! P! @: Y. a        proxyHost = "t.16yun.cn"
8 E% P" z+ h" A0 [. k% j- i) ?1 t        proxyPort = "31111"
, y2 Q7 Z" l) s6 p9 F( N/ P+ n2 o5 X+ Z( x1 g/ e7 [
        # 代理隧道验证信息
+ R1 d8 O- l& |, D        proxyUser = "username"  O1 P4 X7 B8 E
        proxyPass = "password"
" x+ n) Q9 Q9 r! W3 T8 Z2 r9 m6 o7 e7 O0 T+ ]1 w
        proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {8 O8 x$ j6 M+ P' R
            "host" : proxyHost,3 ]( J, E- i, D) D  N
            "port" : proxyPort,
; H, K3 a" L# q, ^4 d            "user" : proxyUser,
7 ]1 n% ~4 m/ n# P8 c            "pass" : proxyPass,
1 k$ i0 h9 O) h        }/ X0 k4 g9 C. ]1 u8 [
- n1 Q8 C$ S& B, x' g
        # 设置 http和https访问都是用HTTP代理
6 n) J5 m3 F7 I4 t# B2 J        proxies = {, V( j1 p3 E# y. t! L, K  Y
            "http"  : proxyMeta,9 |9 r! u9 X) s" j% t* q( E+ Y
            "https" : proxyMeta,' I1 I7 x3 Y5 [# |8 g& H
        }: |+ P6 n0 ^; x% d
) A: j7 S8 Q7 I( q/ H0 I

/ E- V+ t4 i7 c8 Q4 K) W% k  z+ x        #  设置IP切换头) D9 {* A+ J9 o/ n9 Q
        tunnel = random.randint(1,10000)
% Q: n/ J" r7 O8 K2 A5 n$ t        headers = {"Proxy-Tunnel": str(tunnel)}
* P$ q, G/ |3 H4 w8 h# O        resp = requests.get(targetUrl, proxies=proxies, headers=headers)
3 G4 z. C0 a; p3 F* R
/ p' P3 F* c- D* q! H; p* }        print resp.status_code+ |; h( Q; }+ V- `
        print resp.text
3 e, q2 ~! Z0 z& U# w: B总结' o1 H! \3 F1 N* U
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流
, M7 O) d  y! F3 h7 I# ?2 E" l
" _1 R1 I/ x3 `# n, b* \




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5