数学建模社区-数学中国

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

作者: 杨利霞    时间: 2021-1-8 17:22
标题: Python爬虫常用小技巧之设置代理IP
# T. S5 q" @3 Y5 T
Python爬虫常用小技巧之设置代理IP

6 i' j  U8 b1 c& n) Y# v2 M0 H% N8 @) Z' P& G8 ^, s; W
设置代理IP的原因+ ^' W( U; Z& a$ V" h$ _
我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站。假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,这样便不会出现因为频繁访问而导致禁止访问的现象。6 |7 Z7 Z) ?5 d& c% ]9 A& `" e& V
我们在学习Python爬虫的时候,也经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败。高强度、高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以下面这篇文章讲述一个爬虫技巧,设置代理IP$ f7 ?  z, b/ ^
代理的获取有很多方式,网上有很多免费的可以去爬取一些试试,但是免费的代理使用起来也是 很吃力的。还有就是现在网上有很多的代理供应商,可以在网上寻找下,然后找家靠谱的使用。毕竟网络太大了,代理供应商肯定也是参差不齐的,所以找到合适的代理还是需要花点时间的。在这里我就是使用了我们长期使用的一家质量好的代理,亿牛云代理,而且是使用的他们的爬虫代理(动态转发)和一般的api模式不一样。这种更简单更方便,对于懒人来说绝对是最佳选择。' m  B" r; y$ q" T' @8 E7 j# x
具体代码的使用
0 m( O, I# P- m#! -*- encoding:utf-8 -*-
! t' b8 w# t" c6 t: [, A) U* m* @# {
        import requests* n' U; |; ~* a
        import random6 I' }. g) D0 i& V0 z7 n' D
3 s! X# l, f: W
        # 要访问的目标页面) R5 t: D  X& ]! j; I4 o2 v
        targetUrl = "http://httpbin.org/ip"
3 o& y( s" @. i/ V, M& O" ]) c8 E4 g% _2 Q' a6 E5 d
        # 要访问的目标HTTPS页面
5 T, @) m, O- X3 i7 \( `& G8 p        # targetUrl = "https://httpbin.org/ip"
* v- j0 H% K; I& O5 X8 k. v, r
5 M7 x8 \' f7 b( E        # 代理服务器
: w/ x' N4 D% B2 N) Q2 i& x* B        proxyHost = "t.16yun.cn"8 f9 `2 O$ x4 R) @
        proxyPort = "31111"
; o/ O" O% }9 C) I& ~" `# o* Y7 M5 [% z1 `3 b
        # 代理隧道验证信息. e( s+ ]! a! [! J+ ]  g
        proxyUser = "username"% V+ E& n! I; W5 n8 e4 |
        proxyPass = "password"4 U+ Q5 G3 Z% [- K

- n, Z3 K1 }% E. k# c0 [' p        proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {" W/ Y) l6 V7 H- r0 x
            "host" : proxyHost,
6 u. B; I. y, O1 n) d            "port" : proxyPort,
# k) c& r, V) h            "user" : proxyUser,
5 s. t8 \, s" e8 ]            "pass" : proxyPass,& d  W, P/ d" N
        }
0 l0 `4 q' r- E9 W3 @* T1 M. b3 s% P7 ~: y5 ?8 ~0 Y9 a' c
        # 设置 http和https访问都是用HTTP代理1 s3 S/ f2 D6 S
        proxies = {
& I6 [3 B9 l* b* z8 t            "http"  : proxyMeta,5 {1 o5 z- R3 K8 F" k9 r/ D
            "https" : proxyMeta,
8 ~& l7 D3 }) |7 M1 A        }. @/ _# v3 x% _
; I5 i/ D& @6 N& w
1 B% P3 z, ]+ C) Y+ F) a5 d7 b' S
        #  设置IP切换头
7 }1 E9 O; y# n+ n0 |        tunnel = random.randint(1,10000)
" q0 K% @- F+ l0 q# q4 ]4 [        headers = {"Proxy-Tunnel": str(tunnel)}5 ?0 v) ]5 p$ t/ r4 t; |
        resp = requests.get(targetUrl, proxies=proxies, headers=headers)
/ R# O3 p6 g; J9 F! `' `
' t( a; ]: F! K6 L; `4 K. @. A: ^        print resp.status_code6 U+ B/ q/ @. A3 y& \$ `
        print resp.text! H: b2 B- R& a! Y
总结
9 X5 I  K/ I4 i1 v5 F以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流
: d; }" i1 F# G
) i7 `  a' z: c, Q0 {/ C




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