数学建模社区-数学中国

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

作者: 杨利霞    时间: 2021-1-8 17:22
标题: Python爬虫常用小技巧之设置代理IP
1 h9 i  F& r8 Z' K0 O# b- o8 Y6 U. |
Python爬虫常用小技巧之设置代理IP
+ t, y& ^: f+ y1 y
6 }/ N7 S6 L' B/ g1 [
设置代理IP的原因: H; U9 ~1 Y% ?6 [: c3 o
我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站。假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,这样便不会出现因为频繁访问而导致禁止访问的现象。* \9 l1 z: a+ V9 u2 L, E
我们在学习Python爬虫的时候,也经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败。高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以下面这篇文章讲述一个爬虫技巧,设置代理IP
' o% d1 q+ E2 A7 Q5 J* `代理的获取有很多方式,网上有很多免费的可以去爬取一些试试,但是免费的代理使用起来也是 很吃力的。还有就是现在网上有很多的代理供应商,可以在网上寻找下,然后找家靠谱的使用。毕竟网络太大了,代理供应商肯定也是参差不齐的,所以找到合适的代理还是需要花点时间的。在这里我就是使用了我们长期使用的一家质量好的代理,亿牛云代理,而且是使用的他们的爬虫代理(动态转发)和一般的api模式不一样。这种更简单更方便,对于懒人来说绝对是最佳选择。
9 E+ {9 l4 l# [8 D% R8 U) F5 ?具体代码的使用
% @+ \! _% P% _  {( n#! -*- encoding:utf-8 -*-
1 m$ Y7 U3 _" W% c1 \0 ~
% \5 B) l9 |) {) d" G) m        import requests9 W) Z* i4 {9 X
        import random
) y/ h: ]; J( A& z! Y1 U8 G  @
4 k4 Y4 S. j$ \- A; [        # 要访问的目标页面% ]! U3 ]5 u: D1 x! o" M0 A- h
        targetUrl = "http://httpbin.org/ip"* E1 X: }* }; X+ s$ Z9 w5 w2 m
3 j9 U8 U3 h6 ~
        # 要访问的目标HTTPS页面% ~" U: |, X! M& w
        # targetUrl = "https://httpbin.org/ip"
) Q! g, X/ N1 m" U  g6 b6 z
# M- q' e  L' @        # 代理服务器: m3 R$ ]: h) Z9 @
        proxyHost = "t.16yun.cn"0 R8 n5 P! X0 [' Y
        proxyPort = "31111") m" ?9 ^- q( o: A/ S1 r, v7 O9 J

2 c" u2 y- B$ |! r! [        # 代理隧道验证信息
& h% Y4 h: a/ Y" O) c' L7 O$ b  F- e        proxyUser = "username"
/ g. G) f; N2 J! [        proxyPass = "password"- x$ K. Z9 k0 r7 o

& H' i6 N. z& ]( b# c        proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
/ C. n- _/ m9 f- c# V            "host" : proxyHost,8 S/ N5 ^; [0 F) i  o4 T3 g6 f
            "port" : proxyPort,
: h$ y& m7 `) Q) c2 l            "user" : proxyUser,- m* A* k; \/ J9 v% T& y" t2 ^& M6 q
            "pass" : proxyPass,: X8 Z! m& z) E8 N/ B: G3 a: u
        }
: l  @+ X9 F8 v) T6 |$ C9 B
: G0 H2 V2 @! l& J& _        # 设置 http和https访问都是用HTTP代理. w0 w7 x2 _- m& ~
        proxies = {
1 c) c$ M1 r5 }" D* N4 i. ?* b            "http"  : proxyMeta,
! ]; l- Z4 A/ v* A9 G$ b- O. |* z! O: N            "https" : proxyMeta,
; `$ H: Y7 T8 a+ y        }' H5 z3 \. @5 F" o8 i9 B' u

5 O, X9 B7 @  `- F8 p" Y5 x8 P
: l# e/ R% `" M: W* ]9 s        #  设置IP切换头
' N5 E4 ], @2 S7 x  r        tunnel = random.randint(1,10000)
  o% G6 P: i) T2 a) J% Y2 _        headers = {"Proxy-Tunnel": str(tunnel)}. n& X2 O) b) J; G! |. a
        resp = requests.get(targetUrl, proxies=proxies, headers=headers)
1 V% K* K7 S' U% M  f  d- }: ^! C1 `1 ]$ l2 [7 e
        print resp.status_code# n0 ^3 p! x5 G% w3 e9 V# M
        print resp.text0 T2 z0 H3 [7 C0 L: }5 d) l
总结# y- y# Q* t8 u  T; g% d- }. D
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流9 z' l% E% k1 K) l) w; J/ O: x/ e
( L# c+ U# u  b' w8 X





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