数学建模社区-数学中国

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

作者: 杨利霞    时间: 2021-1-8 17:22
标题: Python爬虫常用小技巧之设置代理IP

  b1 _2 _2 I4 E8 M$ o
Python爬虫常用小技巧之设置代理IP

5 d  r& o2 e" B4 e9 N  y  z% o% g3 a6 q$ V
设置代理IP的原因
" ?0 L+ s* @3 l  ]* E3 g我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站。假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,这样便不会出现因为频繁访问而导致禁止访问的现象。
) }5 D+ |: J% ?* _4 C我们在学习Python爬虫的时候,也经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败。高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以下面这篇文章讲述一个爬虫技巧,设置代理IP
0 @* e* s1 o# G代理的获取有很多方式,网上有很多免费的可以去爬取一些试试,但是免费的代理使用起来也是 很吃力的。还有就是现在网上有很多的代理供应商,可以在网上寻找下,然后找家靠谱的使用。毕竟网络太大了,代理供应商肯定也是参差不齐的,所以找到合适的代理还是需要花点时间的。在这里我就是使用了我们长期使用的一家质量好的代理,亿牛云代理,而且是使用的他们的爬虫代理(动态转发)和一般的api模式不一样。这种更简单更方便,对于懒人来说绝对是最佳选择。- k  ^1 \% I% k& ^# X) |
具体代码的使用
. A9 ?3 o) Y% U4 n; v#! -*- encoding:utf-8 -*-
' V$ W/ d7 v# Y3 ]7 y, ^* I6 u' v' P! J, `# D2 z% d
        import requests& X6 ?0 C! J. \5 X
        import random
! J) N4 B% c' n
& _6 d) R4 e% u        # 要访问的目标页面$ K$ r1 c1 J0 V( Y2 E
        targetUrl = "http://httpbin.org/ip"7 q9 u' n$ O/ L

5 A+ R- z7 Q; `3 `- y- E1 B* P        # 要访问的目标HTTPS页面
6 ?/ P" Q5 v$ J. X& Z( h        # targetUrl = "https://httpbin.org/ip"% C, s# }9 V1 H  Z7 }: R) i* {( A

( V" H* ]5 {$ Q0 F" P& ~# J        # 代理服务器
+ A( ~% `2 L; u4 o3 k9 x+ R! r        proxyHost = "t.16yun.cn"
$ D3 u1 v) I  E. E) B. ^        proxyPort = "31111"
# I! D0 y" H+ S: E3 P
" d( @0 y# B" ?7 }$ D& ^        # 代理隧道验证信息& r5 s  P6 L% {
        proxyUser = "username"+ V8 O+ |: z  E: d
        proxyPass = "password"
# x2 C1 Y% q. S4 ^; W& `: a( N
- q: l+ n4 E# F$ b' M0 f) [        proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
3 \4 ]+ R% _9 K7 v4 |            "host" : proxyHost,$ X) ^& W5 n/ ?
            "port" : proxyPort,
- `/ U0 j, X5 c* ~2 A( c* S" n            "user" : proxyUser,
! y" W/ b1 H7 C# F- U  O            "pass" : proxyPass,
+ \: Y6 Z+ e: f4 R( _        }1 i, x- @0 Y3 t' j
% N7 }0 |6 i* _" r' Z
        # 设置 http和https访问都是用HTTP代理
3 ^) n5 M8 M) d% R1 D1 O; Y        proxies = {
$ V9 H1 e; H" P5 f7 ?" ?3 m0 Q            "http"  : proxyMeta,
; D' Z$ W" t" V2 X            "https" : proxyMeta,3 }7 \  m* p1 L
        }2 J6 Y, q: L* G* u  C$ s3 d

3 z4 a* Q1 R& c2 i4 \
) L6 e0 k. C8 X( f# i+ l        #  设置IP切换头
0 z; u7 |7 B/ P) G( R: I        tunnel = random.randint(1,10000)
5 p3 K0 N& q" f6 W0 U7 y        headers = {"Proxy-Tunnel": str(tunnel)}' K. W$ @4 ~* m! r, u3 a
        resp = requests.get(targetUrl, proxies=proxies, headers=headers)
( b' m- ~' y" S& F+ h  X# e: h4 F% H. n5 E( \
        print resp.status_code
. q) k* @1 |4 J8 L        print resp.text9 P+ E5 X; F; v. d; ?
总结. M4 v" @& ^- h% s- @9 B
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流
# u4 P6 \! G+ U2 p% @9 c  J5 T/ ?1 V4 V( O





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