Python爬虫 获取免费的代理Ip

本文介绍了在Python爬虫中遇到IP被禁止访问的问题,以及解决方案——通过爬取免费代理IP并检测其可用性。文章详细讲解了如何从网站https://www.xicidaili.com/抓取代理IP,并使用BeautifulSoup解析数据。最后,抓取的可用代理IP会被保存到ipbilibili.txt文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

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,里面就是目前所能够使用的代理了,不过代理有时候会因为各种原因无法连接成功,在使用的时候只要多尝试请求几次一般就可以成功了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值