Python爬虫 获取免费的代理Ip
2020-02-17 05:07
525 查看
**
Python爬虫 获取免费的代理Ip
**
最近在学习爬虫,在抓取b站弹幕的时候,由于同一ip访问次数过多,出现了ip地址被禁止访问的情况。当时贪写起来简单,就没有调取MongoDB数据库存储,使得前面抓取的网页全部丢失了,实在是有点得不偿失。
在网上简单查了一下,出现不明原因访问禁止主要有以下两种解决方法:
- 推迟调用线程的运行,比如 time.sleep()
- 在发送请求时使用代理
在这里记录一下代理的抓取方法。
- 首先,找到免费代理的网站:https://www.xicidaili.com/,利用简单的 requests.get 来获取网页源码,以及 BeautifulSoup 来解析获取代理 ip 的地址和端口。
# 获取西刺代理网站上的免费代理 def get_Ip(): proxies = [] for i in range(1, 3): try: # 西刺代理网上的 https 类型代理 url = 'http://www.xicidaili.com/wn/' + str(i) req = requests.get(url, headers=headers) cnt = req.content # 网页源码中提取IP地址和端口 soup = BeautifulSoup(cnt) ips = soup.findAll('tr') for x in range(1, len(ips)): ip = ips[x] tds = ip.findAll('td') ip_temp = tds[1].contents[0] + '\t' + tds[2].contents[0] proxies.append(ip_temp) except: continue return proxies
- 由于免费代理使用人数较多,且可能不太稳定,需要检测代理能否应用到对目标网站的请求当中。
# 检测获取代理的可用性 def validate_Ip(proxies): url = 'https://www.bilibili.com/' f = open('ipbilibili.txt', 'w') # 用 bilibili 请求访问进行检测并记录通过检测的代理 for i in range(0, len(proxies)): try: ip = proxies[i].strip().split('\t') proxy_host = 'https://' + ip[0] + ':' + ip[1] proxy_temp = {'https': proxy_host} req = requests.get(url, headers=headers, proxies=proxy_temp, timeout=3) f.write(proxies[i] + '\n') print proxies[i] except Exception, e: continue f.close() return True
- 最后,打开目录文件夹下的 ipbilibili.txt,里面就是目前所能够使用的代理了,不过代理有时候会因为各种原因无法连接成功,在使用的时候只要多尝试请求几次一般就可以成功了。
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- numpy基本操作
- python标准库 os
- PEP8 规范(python)
- python 字典
- Eclipse安装python开发插件(转)
- Python 网页使用cookie(转)
- python中文字符乱码(GB2312,GBK,GB18030相关的问题)
- python 的 集合,字典,元组,列表
- 为什么Python做小数计算不靠谱
- python语言种类特点
- python 小知识拾遗
- Python:使用EasyGUI不显示图片
- Python:python3中__bases__的使用(MRO)
- 用python的循环写九九乘法表
- python高级爬虫笔记(1)
- python高级爬虫笔记(2)
- python高级爬虫笔记(4)
- python高级爬虫笔记(3)
- win10下使用python3.7安装python-pcl库
- python sys.argv[]的用法