数学建模社区-数学中国
标题:
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 random
6 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. b
3 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_code
6 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