数学建模社区-数学中国

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

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

% k$ m4 X8 W! @* \6 D" @
Python爬虫常用小技巧之设置代理IP

$ b! O: E/ H8 S: R0 _9 z! {6 x; }7 V" ]7 N' n. X9 ~
设置代理IP的原因
5 b$ }% q* j# n2 M8 ?: X& t) L我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站。假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,这样便不会出现因为频繁访问而导致禁止访问的现象。
5 M& A6 h" m6 x' J我们在学习Python爬虫的时候,也经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败。高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以下面这篇文章讲述一个爬虫技巧,设置代理IP
8 Z1 c& ~1 w8 ]2 Z代理的获取有很多方式,网上有很多免费的可以去爬取一些试试,但是免费的代理使用起来也是 很吃力的。还有就是现在网上有很多的代理供应商,可以在网上寻找下,然后找家靠谱的使用。毕竟网络太大了,代理供应商肯定也是参差不齐的,所以找到合适的代理还是需要花点时间的。在这里我就是使用了我们长期使用的一家质量好的代理,亿牛云代理,而且是使用的他们的爬虫代理(动态转发)和一般的api模式不一样。这种更简单更方便,对于懒人来说绝对是最佳选择。
1 C0 i; P; o4 |具体代码的使用: E# N; B/ v" H9 }8 I
#! -*- encoding:utf-8 -*-
) X3 X6 h5 J# W( p6 m& H- R
6 u! T5 f+ K* N        import requests2 h, `8 ?5 h0 ]9 g
        import random  ~+ o" f, r+ i/ N, C
+ K% r3 X) y' a# a$ B2 I) A6 M( I
        # 要访问的目标页面
+ y) s5 P/ u$ o. O5 r        targetUrl = "http://httpbin.org/ip"
6 |$ w- q- z4 p4 `  P$ b! Y+ `' g8 o3 f& n! a/ [: o8 {0 l
        # 要访问的目标HTTPS页面- G, W! o! q5 {( Q
        # targetUrl = "https://httpbin.org/ip"
" g" ]( K7 r' Y5 v  |5 f' Q% {/ E4 C% r2 J# p+ @5 h/ k7 C
        # 代理服务器
5 T  b) A$ Y6 N- r4 W. d        proxyHost = "t.16yun.cn"
- e3 l' J; B3 n9 F3 v        proxyPort = "31111"2 \. U% @$ y" Z- A; b/ E; z2 s
0 F, u  b7 W7 j$ f9 c; F
        # 代理隧道验证信息
, T1 K- B/ d% B2 M" |* Z        proxyUser = "username"3 r- U% l$ q6 X) V# c3 u& D
        proxyPass = "password"
& a+ w6 `. s8 |$ C
9 @; ^/ C8 V! I        proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {1 R6 [; @5 p& S1 r9 p) `
            "host" : proxyHost,
% ]% P7 @3 F% D- @; w: f' u            "port" : proxyPort,/ k7 Y- T8 T9 g  L4 R+ A) I
            "user" : proxyUser,4 r" m/ s% f/ a% k3 \' E
            "pass" : proxyPass,$ B1 X9 k4 }. O1 F" H
        }
6 j6 `4 G7 v$ Y& c2 O" n3 q# z% O2 H
        # 设置 http和https访问都是用HTTP代理
! Q  o* E  Q" b. ^  C# f        proxies = {
4 b9 E, G* A! @- t0 g) k            "http"  : proxyMeta,
6 d8 u3 O  `1 i; @9 m" _3 b            "https" : proxyMeta,
, F! B4 @1 e7 h/ d! u% D9 M  M        }! X0 F) b6 P: T5 E  B

( K: l3 P8 ^" z( J8 y" `6 v7 r! m+ ~: Z; N
        #  设置IP切换头9 Z  c$ N, q0 R1 {0 R1 v
        tunnel = random.randint(1,10000)' [* I" H* W, {7 e2 U
        headers = {"Proxy-Tunnel": str(tunnel)}
7 l" ?" Z9 i1 r/ d+ q2 x        resp = requests.get(targetUrl, proxies=proxies, headers=headers)0 m0 m2 e  D( N* {
$ I* q$ c7 ^% M
        print resp.status_code
% Q8 \' w+ J. J. @% U1 f7 z        print resp.text
6 K& C0 v; {# R总结& R; z. p  Y* G/ J' d& a1 z+ e4 f
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流
: x( W/ p" a- |  W0 t. e0 [7 e* \6 [! |% h% C9 A+ m





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