您的位置:首页 > 编程语言 > Python开发

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
  • 收藏
  • 分享
  • 文章举报
逗le个芽 发布了4 篇原创文章 · 获赞 1 · 访问量 364 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: