我们在做爬虫的过程中经常会遇到这样的情况:最初爬虫正常运行,正常抓取数据,一切看起来都是那么美好,然而一杯茶的功夫可能就会出现错误,比如403Forbidden;这时候网页上可能会出现

“您的IP访问频率太高”这样的提示,或者跳出一个验证码让我们输入,之后才可能解封,但是一会之后又出现这种情况。

出现这个现象的原因是网站采取了一些反爬虫的措施。比如,服务器会检测某个IP在单位时间内的请求次数,如果超过了某个阀值,那么服务器会直接拒绝服务,返回一些错误信息。这种情况可以称为封IP,于是乎网站就成功把我们的爬虫禁掉了。

试想一下,既然服务器检测的是某个IP单位时间的请求次数,那么我们借助某种方式来伪装IP,让服务器无法识别由我们本机发起的请求,这样不就可以成功防止封IP了吗?

所以这时候代理就派上用场了。本章会详细介绍代理的基本知识及各种代理的使用方式,包括代理的设置、代理池的维护、付费代理的使用、ADSL拨号代理的搭建方法等内容,以帮助爬虫脱离封IP的“苦海”。

我们了解了利用代理可以解决目标网站封IP的问题。在网上有大量公开的免费代理,或者我们也可以购买付费的代理IP,但是代理不论是免费的还是付费的,都不能保证都是可用的,因为可能此IP被其他人使用来爬取同样的目标站点而被封禁,或者代理服务器突然发生故障或网络繁忙。

一旦我们选用了一个不可用的代理,这势必会影响爬虫的工作效率。

所以,我们需要提前做筛选,将不可用的代理剔除掉,保留可用代理。接下来我们就爬取西刺代理的免费代理进行验证然后存到本地搭建一个高效易用的代理池。

首先我们要发送请求获取西刺源码,

这里要注意的是西刺网站也有自己的反爬机制,记得把referer放进请求头

然后编写整个请求代码

def get_html():

# for x in range(2, 5):

url ={

'Remote Address': '123.57.85.224: 443',

'Connection': 'keep - alive',

'Host': 'www.xicidaili.com',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'

}

response =requests.get(url, headers=header, timeout=20)

get_proxy(response.text)

资源爬取之后我们对页面使用xpath进行解析,得到网页中的ip代理,我们只取ip地址和端口

看如下代码

# 解析网页,并得到网页中的IP代理

def get_proxy(html):

selector =etree.HTML(html)

proxies =[]

foreach inselector.xpath("//tr[@class='odd']"):

ip =each.xpath("./td[2]/text()")[0]

port =each.xpath("./td[3]/text()")[0]

# 拼接IP地址,端口号

proxy =ip + ":" +port

proxies.append(proxy)

print(len(proxies))

紧接着把代理都爬取下来之后再对其进行验证是否有效

def test_proxy(proxy):

url ={

"User-Agent":

"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",

}

try:

response =requests.get(

url, headers=header, proxies={"http":proxy}, timeout=1)

ifresponse.status_code ==200:

print("该代理IP可用:", proxy)

thread_write_proxy(proxy)

else:

print("该代理IP不可用:", proxy)

exceptException:

print("该代理IP无效:", proxy)

pass

看结果:

验证完成之后把可用的代理保存到本地文件中

def thread_write_proxy(proxy):

withopen("./ip_proxy.txt", 'a+') asf:

print("正在写入:", proxy)

f.write(proxy+ '\n')

print("录入完成!!!")

这样搭建好了我们的一个代理池,以后需要的时候直接使用这些代理就可以了。我们还可以对程序进行一个改进,在验证IP是否可用的程序是串行的,因此只能验证一个结束后,才进行验证下一个,效率极低,我们可以把它改成多线程,提高我们的一个效率。

def thread_test_proxies(proxies):

proxies =proxies

# print("test_proxies函数开始运行。。。\n", proxies)

forproxy inproxies:

test =threading.Thread(target=test_proxy, args=(proxy,))

test.start()

python爬虫免费代理池_Python爬取免费代理搭建代理池相关推荐

  1. python爬虫有道词典_Python爬取有道词典,有道的反爬很难吗?也就这样啊!

    前言 大家好 ​ 最近python爬虫有点火啊,啥python爬取马保国视频--我也来凑个热闹,今天我们来试着做个翻译软件--不是不是,说错了,今天我们来试着提交翻译内容并爬取翻译结果 主要内容 PS ...

  2. python爬虫知乎图片_python 爬取知乎图片

    先上完整代码 1 importrequests2 importtime3 importdatetime4 importos5 importjson6 importuuid7 from pyquery ...

  3. python 爬虫餐饮行业 数据分析_Python爬取美团美食板块商家数据

    导语 利用Python简单爬取美团美食板块商家数据... 其实一开始我是想把美团的所有商家信息爬下来的,这样就可以美其名曰百万数据了... 然而相信很多爬过美团的朋友都发现了... 如果不进行一些小操 ...

  4. python爬虫淘宝评论_Python爬取淘宝店铺和评论

    1 安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动s ...

  5. python爬虫猫眼电影票房_python爬取猫眼电影top100排行榜

    爬取猫眼电影TOP100(http://maoyan.com/board/4?offset=90) 1). 爬取内容: 电影名称,主演, 上映时间,图片url地址保存到mariadb数据库中; 2). ...

  6. python爬虫提取a标签_python 爬取a标签内href的方法及遇到的问题

    1 #-*- coding:utf-8 -*- 2 #python 2.7 3 #XiaoDeng 4 #http://tieba.baidu.com/p/2460150866 5 #标签操作 6 7 ...

  7. 从入门到入土:Python爬虫学习|实例练手|爬取猫眼榜单|Xpath定位标签爬取|代码

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  8. 从入门到入土:Python爬虫学习|实例练手|爬取百度翻译|Selenium出击|绕过反爬机制|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  9. 从入门到入土:Python爬虫学习|实例练手|爬取新浪新闻搜索指定内容|Xpath定位标签爬取|代码注释详解

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

最新文章

  1. ubuntu12.04LTS下eclipse indigo版配置opencv2.4.9
  2. 敏捷中gwt含义_在GWT中序列化/反序列化Json
  3. Html5和Css3扁平化风格网页
  4. Vue项目 报错TypeError [ERR INVALID ARG TYPE]: The “path“ argument must be of type string
  5. eclipse安装web插件、安装centos版本的idea
  6. 移动端的h5遇到的一些坑记录
  7. A69G-HDMI问题解决集锦
  8. matlab潮流计算编程教学,潮流计算 程序_牛拉法潮流计算程序_matlab潮流计算教程...
  9. Zemax仿真中像质评价及方法
  10. 洞察·分析·管理 | 解读良品铺子的客户体验管理三部曲
  11. 信息系统综合知识八 专业英语
  12. Python常用配置文件ini、json、yaml读写总结
  13. C语言教程(七):函数
  14. studio 3t MongoDB for MAC 201903+Cracking
  15. 微信公众号运营外包价格是多少?
  16. Wi-Fi Mesh协议(1)
  17. 基于android的网上点餐系统设计,基于Android的点餐系统设计与实现
  18. 小米模式VS华为模式,谁能主宰智能家居的下一个十年?
  19. 特此郑重声明!我的文章全部是原创作品!转载请注明出处!
  20. 更改office安装的默认路径

热门文章

  1. 使用静态容器防止并发修改同一对象
  2. Oracle 11g ADG 配置没问题,但死活不同步案例
  3. db_name,instance_name,service_names,db_domain,dbid,oracle_sid等区别与联系
  4. Iplat 4J 6.2 常见问题
  5. 设置版权声明html,在Hexo中自动为Yilia主题增加版权声明
  6. zynq7020安装linux图形界面,ZYNQ开发板的NFS文件系统安装 - ZYNQ7020学习
  7. python 函数式_10分钟学习函数式Python
  8. 1用switch语句从控制台输入100以内的分数判断优秀,良好,及格不及格属于哪一个区间
  9. SpringBoot中修改MySQL数据库建表方言
  10. mysql解压包安装出现 No such file or directory错误的解决办法