首页 > 编程语言 > 详细

Python爬虫学习笔记——防豆瓣反爬虫

时间:2016-01-14 12:18:32      阅读:252      评论:0      收藏:0      [点我收藏+]

开始慢慢测试爬虫以后会发现IP老被封,原因应该就是单位时间里面访问次数过多,虽然最简单的方法就是降低访问频率,但是又不想降低访问频率怎么办呢?查了一下最简单的方法就是使用转轮代理IP,网上找了一些方法和免费的代理IP,尝试了一下,可以成功,其中IP代理我使用的是http://www.xicidaili.com/nn/

获取Proxies的代码如下:

 1 for page in range(1,5):
 2     IPurl = http://www.xicidaili.com/nn/%s %page
 3     rIP=requests.get(IPurl,headers=headers)
 4     IPContent=rIP.text
 5     soupIP = BeautifulSoup(IPContent,"html5lib")
 6     trs = soupIP.find_all(tr)
 7     for tr in trs[1:]:
 8         tds = tr.find_all(td)
 9         ip = tds[2].text.strip()
10         port = tds[3].text.strip()
11         protocol = tds[6].text.strip()
12         if protocol == HTTP:
13             httpResult = http:// + ip + : + port
14         elif protocol ==HTTPS:
15             httpsResult = https:// + ip + : + port

由于Requests是可以直接在访问时候加上proxies的,所以我直接得到的格式使用的是proxies中的格式,requests库文档中,添加代理的格式如下:

import requests

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

 测试可以使用http://www.ip.cn测试访问时的本地IP,代码如下:

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import html5lib
 4 headers = {
 5 "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36",
 6 }
 7 proxies ={
 8     "http":http://122.193.14.102:80,
 9     "https":"http://120.203.18.33:8123"
10 }
11 r = requests.get(http://www.ip.cn,headers=headers,proxies=proxies)
12 content = r.text
13 ip=re.search(rcode.(.*?)..code,content)
14 print (ip.group(1))

上面的代理需要根据自己实际可用代理替换。

参考链接:http://docs.python-requests.org/zh_CN/latest/user/advanced.html

               http://www.oschina.net/code/snippet_2463131_51169

Python爬虫学习笔记——防豆瓣反爬虫

原文:http://www.cnblogs.com/rockwall/p/5129670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!