前言

网络爬虫在运行过程中并不顺利,总是会遇到各种各样的问题,如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相关推荐

  1. 如何利用python抓取免费的IP资源、并测试http代理是否可用

    最近上某乎,发现很多人在用免费的HTTP代理,但是又不知道这个IP是不能可用的,今天带大家get如何判断你网上抓取来的免费HTTP代理是否可用. 一.获取可用的HTTP代理 先用Ping 获取一些可用 ...

  2. Scrapy抓取免费ip代理地址的示例

    Scrapy是一个用于爬取网站并提取结构化数据的应用程序框架,可用于各种有用的应用程序,例如数据挖掘,信息处理或历史档案.本文主要描述从某IP代理网站抓取内容的代码示例,免费代理IP时效性很差,仅供大 ...

  3. Python爬虫方式抓取免费http代理IP

    我们新手在练手的时候,常常需要一些代理IP进行爬虫抓取,但是因为学习阶段,对IP质量要求不高,主要是弄懂原理,所以花钱购买爬虫代理IP就显得没必要(大款忽略),今天跟大家分享一下,如果使用爬虫抓取免费 ...

  4. python 代理ip验证_python爬虫成长之路(二):抓取代理IP并多线程验证

    上回说到,突破反爬虫限制的方法之一就是多用几个代理IP,但前提是我们得拥有有效的代理IP,下面我们来介绍抓取代理IP并多线程快速验证其有效性的过程. 一.抓取代理IP 提供免费代理IP的网站还挺多的, ...

  5. 用python抓取智联招聘信息并存入excel

    用python抓取智联招聘信息并存入excel tags:python 智联招聘导出excel 引言:前一阵子是人们俗称的金三银四,跳槽的小朋友很多,我觉得每个人都应该给自己做一下规划,根据自己的进步 ...

  6. Python 抓取可用代理IP

    问题描述 在做数据抓取的时候,经常会碰到有些网站对同一IP的访问频率做限制.遇到这种情况一般只有两种解决方案: 降低抓取频率.这种方法在数据变化不频繁,数据量不大的情况下还好,但是,如果数据变化频繁或 ...

  7. python爬虫:批量抓取代理ip,进行验证,抓取豆瓣网站影视信息

    本文作为学习笔记参考用: [1]批量抓取代理ip: 找到第三方ip代理的网站,进行分析,并批量抓取,抓取程序放到Proxies_spider.py中,如下所示: import re import re ...

  8. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个 ...

  9. 第11篇- 抓取免费代理IP并搭建自己的代理IP池

    提前声明:该专栏涉及的所有案例均为学习使用,如有侵权,请联系本人删帖! 文章目录 一.前言 二.了解代理IP 三.抓取代理ip网站 四.完整代码 一.前言 使用代理IP原因:对于我们数据抓取来说,由于 ...

最新文章

  1. PHP源代码分析-字符串搜索系列函数实现详解
  2. json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值...
  3. java.lang包—类Class应用之Java反射机制是什么,为什么,怎么用。
  4. http协议工作流程
  5. SF :Salesforce中,look up 和 master detail关系
  6. Jinja2学习笔记暨官方文档的翻译 -- 转载
  7. flock SUSE/RHEL
  8. dataframe格式的数据处理
  9. C++基础:: struct vs class
  10. 论文阅读:Siam-RPN
  11. 汇编语言源程序基础分析--跑马灯
  12. Windows 性能监视器概述
  13. 单系统 台电x80pro_台电x80 pro (ID:E3E6)安装remix OS系统教程整理
  14. python-转义字符及其使用
  15. web前端笔记整理,从入门到上天,周周更新
  16. 【Qt】仿QQ表情选择控件
  17. 2022年中式面点师(初级)考试题库及模拟考试
  18. 如何成为一个更好的程序员,或者说是学习者?给你七个建议!
  19. 软件测试——三角形问题测试用例练习
  20. Nginx源码分析之ngx_hash_t

热门文章

  1. 基于Python的JS逆向和AST抽象语法树
  2. Linux——MySQL高可用-PXC架构
  3. 2021年中国在线教育行业投融资现状及未来发展趋势分析[图]
  4. rasa算法_Rasa 聊天机器人框架使用
  5. 浅谈JAVA的往日辉煌与未来趋势
  6. QQ邮箱 接受 天气查询 阿里云自动运行学习记录
  7. PostgreSQL统计表占用空间
  8. TB级(小白到大牛之路)技术视频资源福利大放送
  9. 4个惨烈冤案背后的司法真相
  10. 乙腈和水共沸_水在不同压力下的沸点及常见的共沸物