Python爬虫小技巧:使用IP代理(一)

序、在爬虫中为何要使用随机请求头?

服务器会判断一个频繁的请求是不是来自于同一个User-Agent标识,或者判断User-Agent是不是以python开头。如果是,则会限制访问。

解决方案:随机切换User-Agent的值

一、在爬虫中为何要使用IP代理

客户端的IP地址是唯一的,所以开发者便将IP地址作为客户端的身份标识。

服务器会判断一个频繁的请求是不是来自于同一个IP地址发出的,对于访问速度过高或者访问次数过多的IP,则会对IP进行反爬虫限制访问。

对于访问速度的处理:间隔一段时间爬取一次,避免频繁访问;

对于访问次数的处理:使用代理IP,随机切换IP地址,不使用真实的IP来发起请求。

二、解决方案

搭建IP代理池,原理如下图所示:

其中又包括免费获取付费获取两种方式。

首先介绍免费获取代理ip池的方法。

优点:免费

缺点:

1.代理ip稳定性差需要经常更换

2.爬取后ip存在很多不可用,ip需要定期筛选

三、免费获取代理ip池主要思路

1.从代理ip网站获取IP列表

2.检测ip是否能用

3.随机选择ip

4.使用代理ip爬取网站

获取IP

几个能提供免费代理的代理服务网站:

66代理:

http://www.66ip.cn/

西刺代理:

https://www.xicidaili.com

全网代理:

http://www.goubanjia.com

云代理:

http://www.ip3366.net

IP海:

http://www.iphai.com

快代理:

https://www.kuaidaili.com

免费代理IP库:

http://ip.jiangxianli.com

以获取“66代理”ip列表为例,发现ip存储在标签下的第一个标签内,可采用正则表达式提取。

以获取“66代理”前2页的IP为例,代码如下:

#从ip代理网站获取ip列表
import requests
import re
headers = {    
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
}
ip_list=[]
for i in range(1,3):
    if i==1:
        url='http://www.66ip.cn/index.html'
    else:
        url=f'http://www.66ip.cn/{i}.html'
    r= requests.get(url, headers=headers)
    ip_list_single_page = re.findall('<tr><td>(.*?)</td>',r.text)[1:]
    ip_list.extend(ip_list_single_page)

获取的IP列表如下:

检测IP

因为我们是爬取的免费的IP,所以我们要对其进行检测,看看是否有效。判断是否有效的方法就是加上代理ip给百度发送get请求,看看status_code()的返回码是不是200,检测代码如下:

#检测ip有效性,获取有效ip列表
valid_ip_list=[]
for ip in ip_list:
   try:
       proxies= {'https': 'https://' + ip,
                 'http': 'http://' + ip}
       r= requests.get('https://www.baidu.com', headers=headers,proxies=proxies)
       if r.status_code == 200:
           valid_ip_list.append(ip)
   except:
       print('ip无效')

很遗憾,运行结果显示,我们获取的上述ip均无效。

我们发现,免费ip代理获取的ip几乎都不能用。

便宜没好货,好货不便宜!

随机选择IP

假设,如果,我们从免费代理网站获取的IP是有效的,得到有效IP列表valid_ip_list不为空,后续就应该随机选择IP,代码如下:

#在有效ip列表中随机取出一个ip
import random
def get_random_ip(valid_ip_list):
    ip=random.choice(valid_ip_list)
    proxies= {'https': 'https://' + ip,
              'http': 'http://' + ip} #proxies的格式是一个字典:{‘http’: ‘http://123.123.321.123:808‘}
    return proxies

使用代理IP

代码如下:

#使用代理ip访问网页
url='https://www.baidu.com'
proxies=get_random_ip(valid_ip_list)
r=requests.get(url,proxies=proxies,headers=headers)

免费IP代理的最大缺点在于大部分IP是无效的。

最后:

Python学习资料

如果你想学习Python帮助你实现自动化办公,或者准备学习Python或者正在学习,下面这些你应该能用得上,有需要可以领取。

① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习
⑤历年互联网企业Python面试真题,复习时非常方便

文末有领取方式哦

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python课程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

在这里插入图片描述

三、Python实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述 四、Python漫画教程

用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。

在这里插入图片描述
在这里插入图片描述

五、互联网企业面试真题

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要也可以扫描下方csdn官方二维码或者点击主页和文章下方的微信卡片获取领取方式,【保证100%免费】

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值