使用代理IP实现爬虫

1.使用代理ip爬虫
我们在进行爬虫任务的时候经常会遇到网站设置的反爬关卡,比如限制单个ip一秒或者几秒内访问服务器几次,超过这个次数就把这个ip拉进"黑名单",我们一般自己的网络只有一个ip,ip封了就没办法继续访问这个网站了,那我们怎么办呢,我们可以使用别人的ip去访问啊,这样就算封了,我们再换一个就好了。
2。获取代理IP池
这里我是从一个资源网站找的https://www.kuaidaili.com/free/inha/{}/
首先我们请求该网站,并解析页面。

proxy = []        #空的数组,用来存放IP
def askurl(url):
    head = {"User-Agent": "Mozilla/5.0"}  #设置请求头
    r = requests.get(url, time.sleep(1),headers=head)#requests模块,返回json格式数据
    html = etree.HTML(r.text)  #使用etree将字符串转换成element对象
    ips = html.xpath("//td[@data-title='IP']//text()")  #使用xpath语句获取到当前页面中的ip
    ports = html.xpath("//td[@data-title='PORT']//text()")#同理获取到port

接下来我们就要”组装“IP地址,我们知道一般我们完整的IP地址格式为http://192.168.1.1:8888(举例说明),前面为我们的协议格式,也可以为https格式,中间部分是我们的ip地址,:后面的为端口号,一个完整的IP地址应该为这样,所以我们根据获取到的IP和端口号组装成一个完整的IP。

    for ip, port in zip(ips, ports):   #对两个数组进行遍历
        line = ip+':'+port             #line为IP+端口号
        proxy_temp = {"http":'http://'+line}  #前面部分声明使用的协议,后面用于拼接
        proxy.append(proxy_temp)  #将拼接好的IP放到数组里

这样我们的IP代理池已经创建好了,接下来就来访问具体的地址

urla = 'https://movie.douban.com/top250'  #目标网址
    for pro in proxy:                     #遍历代理池
        try:
            res = requests.get(urla,headers=head, proxies=pro)
            # print(res.text)
            print(res)
            print(pro)
        except Exception as e:#这里需要注意的是在python3.7往后必须使用 as e,不然会报错,之前版本使用的是 except Exception, e:
            print(pro)
            print(e)
            continue

最后我们看看输出的结果:

<class 'requests.models.Response'>
<Response [200]>
{'http': 'http://27.43.188.247:9999'}
<Response [200]>
{'http': 'http://112.195.154.238:1133'}
<Response [200]>
{'http': 'http://120.83.104.78:9999'}
<Response [200]>

这里我们输出的不是element格式,在上面修改一下即可,不过确定的是我们可以访问成功,至此,一个代理IP实现爬虫就实现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值