Python爬虫新手入门教学(十九):爬取ip代理,构建代理池

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

前文内容

Python爬虫新手入门教学(一):爬取豆瓣电影排行信息

Python爬虫新手入门教学(二):爬取小说

Python爬虫新手入门教学(三):爬取链家二手房数据

Python爬虫新手入门教学(四):爬取前程无忧招聘信息

Python爬虫新手入门教学(五):爬取B站视频弹幕

Python爬虫新手入门教学(六):制作词云图

Python爬虫新手入门教学(七):爬取腾讯视频弹幕

Python爬虫新手入门教学(八):爬取论坛文章保存成PDF

Python爬虫新手入门教学(九):多线程爬虫案例讲解

Python爬虫新手入门教学(十):爬取彼岸4K超清壁纸

Python爬虫新手入门教学(十一):最近王者荣耀皮肤爬取

Python爬虫新手入门教学(十二):英雄联盟最新皮肤爬取

Python爬虫新手入门教学(十三):爬取高质量超清壁纸

Python爬虫新手入门教学(十四):爬取有声小说网站数据

Python爬虫新手入门教学(十五):爬取某音乐网站的排行榜歌曲

Python爬虫新手入门教学(十六):爬取好看视频小视频

Python爬虫新手入门教学(十七):爬取yy全站小视频

基本开发环境

Python 3.6Pycharm

相关模块的使用

import requests# 第三方模块 import parsel import time# 时间模块

安装Python并添加到环境变量,pip安装需要的相关模块即可。

一、确定目标需求

获取代理IP地址,端口然后对IP进行检测

二、网站数据分析

网站是静态网页,是可以直接获取数据的。

根据re、xpath或者css选择器 都是可以提取数据的,还是比较简单的。爬取IP主要是因为在使用爬虫频繁抓取数据的时候,某些网站是比较容易被封IP的。

虽然网站有很多关于免费的IP代理可以使用,但是基本上都是用不了的。

完整代码

import requests# 第三方模块 import parsel import time# 时间模块 def check_ip(proxies_list): """检测代理ip的可用性""" use_proxy = [] for ip in proxies_list: try: response = requests.get(url= proxies=ip, timeout=2) if response.status_code == 200: use_proxy.append(ip) except Exception as e: print(当前代理ip: , ip, 请求超时, 检测不合格!!!) else: print(当前代理ip: , ip, 检测通过) return use_proxy proxy_list = [] for page in range(1, 11): time.sleep(0.5) print(f==================正在抓取第{page}页数据================) # 1.确定数据所在地址<url>(分析网页性质<静态网页\动态网页>) url = f?stype=1&page={page} headers = { User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36} # 2.发送网络请求 response = requests.get(url=url, headers=headers) html_data = response.text# str # print(html_data) # 3.解析数据 # 3.1 转换数据类型 selector = parsel.Selector(html_data) # 3.2 数据提取 trs = selector.xpath(//table[@class="table table-bordered table-striped"]/tbody/tr)# tr """ # 代理ip的结构 proxies_dict = { "http": "http://" + ip:端口, "https": "http://" + ip:端口, } """ for tr in trs: ip_num = tr.xpath(./td[1]/text()).get() ip_port = tr.xpath(./td[2]/text()).get() # print(ip_num, ip_port) ip_proxy = ip_num + : + ip_port # print(ip_proxy) proxies_dict = { http: "http://" + ip_proxy, https: "https://" + ip_proxy } # 4.数据的保存 proxy_list.append(proxies_dict) print(保存成功:, proxies_dict) print(proxy_list) print(获取到的代理ip数量: , len(proxy_list)) print(============================正在检测代理===================================) can_use = check_ip(proxy_list) print(可用代理:, can_use) print(可用代理数量:, len(can_use))

爬取了100IP代理,最终可以使用的就只有一个,事实证明还是付费的香