python抓取免费ip存入redis
前言
网络爬虫在运行过程中并不顺利,总是会遇到各种各样的问题,如fan爬虫策略,它会试图阻止网络爬虫的运行,限制我们的的ip,所以说我们先需要在请求的时候加上代理ip,避免真实ip被封禁。在某代理批量抓取ip为我们搭建ip代理池做基础。
代理ip种类
1.透明代理:如果你使用了该形式的代理,服务器端知道你使用了代理机制也知道你的真实ip。
2.匿名代理:知道你使用了代理,但是不知道你的真实ip。
3.高匿代理:不知道你使用了代理,也不知道你的真实ip。
代理的类型
1.http:转发http的请求
2.https:代理只能转发https协议的请求
定义爬虫类
class ProxyPool(object):databases_map = db_mapdef __init__(self, start, end):# url列表self.url_list = ['https://free.kuaidaili.com/free/inha/' + str(i) for i in range(start, end)]# 设置请求头self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}# 连接redisself.__r = redis.Redis(host='127.0.0.1', port=6379, decode_responses=True, charset='utf-8', encoding='utf-8')
解析数据
def get_html(self, url):response = requests.get(url=url, headers=self.headers).textreturn responsedef parse(self, html):tree = etree.HTML(html)# ip地址ip = tree.xpath('//*[@id="list"]/table/tbody/tr/td[1]/text()')# 端口号port = tree.xpath('//*[@id="list"]/table/tbody/tr/td[2]/text()')for ips, ports in zip(ip, port):# 完整代理iphttp_proxy_url = 'http' + '://' + ips + ':' + portsself.save(http_proxy_url, 'http')
保存至redis
def save(self, proxy, protocol):try:self.__r.lpush(self.databases_map.get(protocol, None), proxy)except Exception as e:print('出错了:', e)print('保存成功', proxy)
main方法设置多线程爬取
def main(self):for url in self.url_list:html = self.get_html(url)self.parse(html)t_list = []for i in range(10):run = ProxyPool(1, 10)t_list.append(run)thread_list = []for i in t_list:t = Thread(target=i.main, args=())thread_list.append(t)for t in thread_list:t.start()for t in thread_list:t.join()
完整代码
import redis
import requests
from lxml import etree
from threading import Threaddb_map = {"http": "proxies:http:v1","https": "proxies:https:v1"
}class ProxyPool(object):databases_map = db_mapdef __init__(self, start, end):self.url_list = ['https://xxxxxxxx' + str(i) for i in range(start, end)]self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}self.__r = redis.Redis(host='127.0.0.1', port=6379, decode_responses=True, charset='utf-8', encoding='utf-8')def get_html(self, url):response = requests.get(url=url, headers=self.headers).textreturn responsedef parse(self, html):tree = etree.HTML(html)# ip地址ip = tree.xpath('//*[@id="list"]/table/tbody/tr/td[1]/text()')# 端口号port = tree.xpath('//*[@id="list"]/table/tbody/tr/td[2]/text()')for ips, ports in zip(ip, port):# 完整代理iphttp_proxy_url = 'http' + '://' + ips + ':' + portsself.save(http_proxy_url, 'http')def save(self, proxy, protocol):try:self.__r.lpush(self.databases_map.get(protocol, None), proxy)except Exception as e:print('出错了:', e)print('保存成功', proxy)def main(self):for url in self.url_list:html = self.get_html(url)self.parse(html)t_list = []for i in range(10):run = ProxyPool(1, 10)t_list.append(run)thread_list = []for i in t_list:t = Thread(target=i.main, args=())thread_list.append(t)for t in thread_list:t.start()for t in thread_list:t.join()if __name__ == '__main__':run = ProxyPool(1, 10)run.main()
免费的ip似乎不是很稳定,果然好的东西都是花钱买的
python抓取免费ip存入redis相关推荐
- 如何利用python抓取免费的IP资源、并测试http代理是否可用
最近上某乎,发现很多人在用免费的HTTP代理,但是又不知道这个IP是不能可用的,今天带大家get如何判断你网上抓取来的免费HTTP代理是否可用. 一.获取可用的HTTP代理 先用Ping 获取一些可用 ...
- Scrapy抓取免费ip代理地址的示例
Scrapy是一个用于爬取网站并提取结构化数据的应用程序框架,可用于各种有用的应用程序,例如数据挖掘,信息处理或历史档案.本文主要描述从某IP代理网站抓取内容的代码示例,免费代理IP时效性很差,仅供大 ...
- Python爬虫方式抓取免费http代理IP
我们新手在练手的时候,常常需要一些代理IP进行爬虫抓取,但是因为学习阶段,对IP质量要求不高,主要是弄懂原理,所以花钱购买爬虫代理IP就显得没必要(大款忽略),今天跟大家分享一下,如果使用爬虫抓取免费 ...
- python 代理ip验证_python爬虫成长之路(二):抓取代理IP并多线程验证
上回说到,突破反爬虫限制的方法之一就是多用几个代理IP,但前提是我们得拥有有效的代理IP,下面我们来介绍抓取代理IP并多线程快速验证其有效性的过程. 一.抓取代理IP 提供免费代理IP的网站还挺多的, ...
- 用python抓取智联招聘信息并存入excel
用python抓取智联招聘信息并存入excel tags:python 智联招聘导出excel 引言:前一阵子是人们俗称的金三银四,跳槽的小朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步 ...
- Python 抓取可用代理IP
问题描述 在做数据抓取的时候,经常会碰到有些网站对同一IP的访问频率做限制.遇到这种情况一般只有两种解决方案: 降低抓取频率.这种方法在数据变化不频繁,数据量不大的情况下还好,但是,如果数据变化频繁或 ...
- python爬虫:批量抓取代理ip,进行验证,抓取豆瓣网站影视信息
本文作为学习笔记参考用: [1]批量抓取代理ip: 找到第三方ip代理的网站,进行分析,并批量抓取,抓取程序放到Proxies_spider.py中,如下所示: import re import re ...
- python爬取免费优质IP归属地查询接口
python爬取免费优质IP归属地查询接口 python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个 ...
- 第11篇- 抓取免费代理IP并搭建自己的代理IP池
提前声明:该专栏涉及的所有案例均为学习使用,如有侵权,请联系本人删帖! 文章目录 一.前言 二.了解代理IP 三.抓取代理ip网站 四.完整代码 一.前言 使用代理IP原因:对于我们数据抓取来说,由于 ...
最新文章
- PHP源代码分析-字符串搜索系列函数实现详解
- json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值...
- java.lang包—类Class应用之Java反射机制是什么,为什么,怎么用。
- http协议工作流程
- SF :Salesforce中,look up 和 master detail关系
- Jinja2学习笔记暨官方文档的翻译 -- 转载
- flock SUSE/RHEL
- dataframe格式的数据处理
- C++基础:: struct vs class
- 论文阅读:Siam-RPN
- 汇编语言源程序基础分析--跑马灯
- Windows 性能监视器概述
- 单系统 台电x80pro_台电x80 pro (ID:E3E6)安装remix OS系统教程整理
- python-转义字符及其使用
- web前端笔记整理,从入门到上天,周周更新
- 【Qt】仿QQ表情选择控件
- 2022年中式面点师(初级)考试题库及模拟考试
- 如何成为一个更好的程序员,或者说是学习者?给你七个建议!
- 软件测试——三角形问题测试用例练习
- Nginx源码分析之ngx_hash_t