点击上方“程序人生”,选择“置顶公众号”

第一时间关注程序猿(媛)身边的故事

图片源自unsplash

作者

fightjiang

如需转载,请联系原作者授权。

是不是有很多小伙伴都有这种经历,爬网站的时候,由于某些原因,IP 突然就被封了,怎么办勒?是的,今天我们要做的就是爬取网上的免费代理 IP ,再也不用担心自己的 IP 被封啦,爬取的过程很流畅。


确定目标URL:

我们要爬取的是快代理的免费代理 IP ,下面是我们的目标网站。

https://www.kuaidaili.com

代码解析:


这是向网页发出请求的函数,老套路了,相信大家心里肯定很清楚了。

# 向网页请求数据,老套路了def get_one_page(url):   try:       headers = {           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'       }       reponse = requests.get(url,headers = headers)       if reponse.status_code == 200:           return reponse.text       return None   except RequestException:       return None

获取网站相应的 IP 以及端口,并将数据保存在本地,也是老套路了,如果有不怎么熟悉的小伙伴,可以看看前面的文章哟。

def get_one_parse(url):   with open('/Users/lec/Desktop/456.txt', 'a+') as f: # 保存在相应的文件里       print(url) # 看爬取到第几页来了       html = get_one_page(url)       html = etree.HTML(html)# 从获得的html页面中分析提取出所需要的数据       IP = html.xpath('.//*[@id="list"]/table/tbody//td[1]/text()') # 解析到相应的位置,用我上次教大家的方法,很方便的       poots = html.xpath('.//*[@id="list"]/table/tbody//td[2]/text()')# 这是 端口位置       for (ip,poot) in zip(IP,poots): # 保存           ip = ip +':' +  poot           print("测试:{}".format(ip))           f.write(ip + '\n')           #validate(ip)

这是主函数,用一个 for 循环,模拟网站翻页的处理,并在每一次爬完一页之后,休息一秒。

def main():   url = 'https://www.kuaidaili.com/free/intr/{}/' # 这是网站的 url   for i in range(1,20): # 爬取二十页       time.sleep(1)  # 休息 1 秒       get_one_parse(url.format(i))

你以为这篇文章是在和你讲老套路吗?不存在的,我在爬取 IP 的同时,一开始有想边爬取,边进行 IP 是否有效的验证,结果是贼慢了,根本无法忍受的速度,于是我写了另外的一个脚本来专门进行 IP 是否有效的验证,上面的代码就只需要把 IP 保存到本地就可以了啦!

我们这里采用多线程并发的方法来进行 IP 是否有效的验证,速度还是挺快的,我这里设置了全局变量,为了大家阅读的方便,我一次性把代码全部贴出来了,基本上每行代码都有非常详细的解释的,这里是使用了 map 简捷实现 Python 程序并行化,想要深入学习的小伙伴请自行查资料,我这里就不再详细介绍了,上代码!

import requestsfrom multiprocessing.dummy import Pool as ThreadPool # 引入这个库来获得map函数的并发版本

#设置全局变量,来保存可用的 IPalive_ip = []

def validate(ip):   IP = {'http':ip} #指定对应的 IP 进行访问网址   try:       r = requests.get('http://www.baidu.com', proxies=IP, timeout=3)# proxies 设定对应的代理 IP 进行访问, timeout 设定相应的时间之后停止等待响应       if r.status_code == 200:           print("成功:{}".format(ip))           alive_ip.append(ip) # 有效的 IP 则添加进去   except:       print("无效")

def save():

   with open('/Users/lec/Desktop/ip.txt','a+') as f: # 将有效的 IP 写入文件中保存       for ip in alive_ip:           f.write(ip+'\n')           print(ip)       print("成功保存所有有效 ip ")

def main():   with open('/Users/lec/Desktop/456.txt','r') as f:       lines = f.readlines()       # 我们去掉lines每一项后面的\n\r之类的空格       # 生成一个新的列表!       ips = list(map(lambda x:x.strip(),[line for line in lines]))# strip() 方法用于移除字符串头尾指定的字符,默认就是空格或换行符。         pool = ThreadPool(20) # 多线程 设置并发数量!       pool.map(validate, ips) # 用 map 简捷实现 Python 程序并行化       save() # 保存能用的 IP

if __name__ == "__main__":   main()

成果展示:


这个脚本的执行速度还是不错的,同时我们也发现,爬取了 20 页的代理 IP ,能用的却少的可怜,如果自己手动一个一个的去验证,绝对自己先崩溃了,右边的是可用的 IP ,左边的是全部的 IP(未全部展示出来)。

- The End -

「若你有原创文章想与大家分享,欢迎投稿。」

加编辑微信ID,备注#投稿#:

程序 丨 druidlost

小七 丨 duoshangshuang

《PHP 7底层设计与源码实现》作者分享交流会

作者简介

滴滴顺风车运营营销研发团队技术负责人——陈雷老师即将分享新书《PHP 7底层设计与源码实现》中的一些知识点。


进群方式

扫下图二维码或添加小助手微信ID:Balance_Do,回复「PHP7」。然后拉你进群。

进群后可以

1 听嘉宾浅谈内存管理,Zval和HashTable,有机会和嘉宾互动交流;

2 嘉宾分享结束后,从群内活跃互动者中抽取5名幸运用户,免费得此书。

分享时间

7月6日(本周五)12点(分享开始前一小时起停止拉人入群。想听作者关于PHP7源码内容分享的用户请留意在此时间前进群)

开奖时间

7月6日当天作者分享结束后,群内抽奖

更多精彩内容

你还在担心你的 IP 被封吗?相关推荐

  1. openwrt安装蒲公英_还在担心数据泄密?用蒲公英路由器X3搭建NAS一劳永逸

    还在担心数据泄密?用蒲公英路由器X3搭建NAS一劳永逸 2019-10-23 14:24:27 1点赞 1收藏 0评论 你是AMD Yes党?还是intel和NVIDIA的忠实簇拥呢?最新一届#装机大 ...

  2. docker没有下载完全_看完此文,妈妈还会担心你docker入不了门?

    上周对象突然心血来潮说想养个小宠物,我问想养啥她又说随便,你看着办!!!这我真的比较难办啊!但是咱们程序员能有个对象就不错了,还不赶紧宠着,我只能照办咯! 我去到了一家宠物店,半天也没有找到合适的目标 ...

  3. 你还在担心开车看不到路标吗?我这这有个路标分类的来玩玩啊(有源码有数据集)

    你还在担心开车看不到路标吗? 别看美女看路标 我这有个路标检测分类的小项目日后成型后肯定可以帮你看清路标哦.(我知道开车不看美女就能看到路标,但我偏偏要放一个美女啊 嘿嘿

  4. nginx代理的域名对应的ip更换后还解析到之前的ip

    问题 使用nginx做反向代理,将请求发送到一个域名(例如: proxy_pass http://www.test.com 该域名对应的IP是A) ,刚开始运行一切正常,但是当运行了一段时间以后,域名 ...

  5. androidq获取文件正式路径_还在担心后台复制红包口令 Android Q系统升级将解决这一问题...

    还在担心后台复制红包口令 Android Q系统升级将解决这一问题 2019年01月28日 10:33作者:陈浩天编辑:陈浩天文章出处:泡泡网原创 分享 随着Google I/O大会越来越近,新And ...

  6. 游戏行业校招大揭秘,还在担心学了找不到工作吗?

    今天给大家普及一下游戏公司校招那些事,将会从三个维度(何为校招.校招优势.校招准备)带领大家认识各大知名游戏公司的校招活动.让同学们对校招有一个初步全面的了解!话不多说我们开讲了! 对于在校大学生来讲 ...

  7. 还在担心学Linux懵圈吗?掌握这份Linux思维导图,你就能成为高手

    今天整理了一下收集的Linux思维导图,包括:Linux学习路径,Linux基础入门,Linux内核学习路线,Linux命令参考,Linux命令速查等等.这份导图虽然不是100%全面,但如果能够将里面 ...

  8. 代理ip怎么使用_爬虫如何使用代理ip解决封禁?

    爬虫如何使用代理ip解决封禁? 随着大数据时代的到来,很多做爬虫要用到代理IP,爬虫已经成了获取数据的必不可少的方式,在使用爬虫多次爬取同一网站时,经常会被网站的IP反爬虫机制给禁掉,为了解决封禁 I ...

  9. 代理ip网站的ip怎么来的_妙用代理IP,防止IP被封

    在上网的时候,我们电脑都会有一个IP地址,相当于网络的身份证,IP地址可以查到你所在的城市,用了代理IP就可以保护真实IP,别人看到的也只是代理提供IP的地址,无法得知我们的真实地址. 想完好的隐藏I ...

最新文章

  1. Java-P: 2_3,类成员具有的控制修饰符
  2. 略谈新时尚风之网上购物领域
  3. 可视化:在窗口中显示一个球,该球以与水平成45度夹角作直线运动,当遇到边界时,反弹回来,仍与水平成45度角继续运动。
  4. mongodb及其索引的使用例子
  5. 【C++11新特性】 C++11智能指针之unique_ptr
  6. tensorflow 学习笔记
  7. 计算机算法设计与分析 递归实现快速排序和随机化实现快速排序
  8. 非常好用的终端命令,稀饭~
  9. oracle采购业务流程,ORACLE ERP订单到现金流程图解
  10. 统计学权威盘点过去50年最重要的统计学思想,因果推理、bootstrap等上榜
  11. 系列学习 Gateway 之第 5 篇 —— 搭建高可用网关(完结)
  12. COLA 4.0应用架构在CSB集成平台的应用实践
  13. do还是doing imagine加to_to-do和doing用法及区别
  14. twm配置文件.twmrc
  15. SGE上的qsub以及作业的状态查看
  16. html5脑图_使用HTML5技术绘制思维导图
  17. idea打包meven镜像_docker打包maven项目推送到阿里云镜像仓库
  18. mapgis矢量化怎么打分数_Mapgis矢量化方法
  19. 100天成就卓越领导力:新晋领导者的First100训练法
  20. ldf 和mdf 各是数据库的什么文件?

热门文章

  1. Leetcode-区间问题
  2. 为何“爱辞职”成为了90后的又一标签?
  3. 2020年中国分子诊断行业发展现状分析,行业应用领域不断拓展,发展前景广阔「图」
  4. eclipse birt使用脚本实现换行
  5. PTA 实验2-1-5 将x的平方赋值给y (5分)
  6. treap树---营业额统计
  7. 我的企业使用虚拟信用卡支付有什么优势
  8. 不会聊天怎么办?先做好这10件小事
  9. Python3进阶--正则表达式、json、logging日志配置、数据库操作、枚举、闭包、匿名函数和高阶函数、time、datetime
  10. AxiomSL任命David Weber为首席运营官兼首席财务官以应对快速的全球增长