搭建简易IP代理池

  • ip池的搭建 以及使用自定义模块
    • 准备工作
    • 如何使用自定义的ip池
    • 生成一个适合你的列表
    • 创建一个表格
      • 设定内容居中、居左、居右
      • SmartyPants
    • 创建一个自定义列表
    • 如何创建一个注脚
    • 注释也是必不可少的
    • KaTeX数学公式
    • 新的甘特图功能,丰富你的文章
    • UML 图表
    • FLowchart流程图
    • 导出与导入
      • 导出
      • 导入

ip池的搭建 以及使用自定义模块

由于使用本地ip频繁爬取某个网站,可能会被封ip,因此搭建自己的ip池十分重要。对于反反爬而言,这是一个好方法。

准备工作

这次爬取的网站是快代理中的免费代理。
网站连接如下:
https://www.kuaidaili.com/free/
首先加载一些爬虫必要的库

import requests
from bs4 import BeautifulSoup
import re
import time

没有安装的同学自行安装下

爬虫ip逻辑
1. 获取目标网页的url
2. 解析该网页内容
3. 得到目标ip
4. 检测ip是否可用
5. 存储有效ip

首先定义创建三个list,用于存储之后爬取的ip,端口,类型
然后定义一个获取目标网页的方法。

ip = []
port = []
type = []
def get_url(page):#传入的数据是爬取目标网页的页数for i in range(int(page)):try:print('正在爬取第%d页'%(i+1))url = 'https://www.kuaidaili.com/free/inha/{}/'.format(i+1)print("爬取网址为:",url)IP1,PORT1,TYPE1=get_content(url)#这是一个自定义解析网页内容的方法process_data(IP1,PORT1,TYPE1)print('休息一下')time.sleep(3)#防止访问频率过快,被封except Exception as e:print('爬取失败',e)

然后在获取了目标url后,就是解析网页的内容。

def get_content(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}#加载伪装头防止反爬response = requests.get(url,headers=headers)if response.status_code == 200:print('连接正常')soup = BeautifulSoup(response.text,'lxml')#利用Beautifulsoup解析爬取的内容contents = soup.find_all('td')IP = []PORT = []TYPE = []#用于存储爬取的目标内容for content in contents:content = str(content)#利用正则表达式匹配目标内容if re.findall(r'[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*',content):IP.append(re.findall(r'[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*',content))elif re.findall(r'<td data-title="PORT">',content):PORT.append(re.findall(r'\d{4}',content))elif re.findall(r'<td data-title="类型">',content):TYPE.append(re.findall('[A-Z]{4,5}',content))return IP,PORT,TYPEelse:print('连接失败或遭遇反爬')

接下来就是处理数据,因为这个程序中IP、PORT、TYPE存储的是每一页的数据,因此需要把这些数据汇总。因此定义一个处理数据的方法。

def process_data(IP,PORT,TYPE):for content in IP:ip.append(content[0])for content in PORT:port.append(content[0])for content in TYPE:type.append(content[0])reg = []for i in range(len(ip)):dic ={}dic[type[i]] = ip[i]+':'+port[i]reg.append(dic)can_use = check_ip(reg)#定义检测ip有效的方法print('有用的ip数量为:',len(can_use))save_ip(can_use)#定义一个保存有效ip的方法

接下来就是检测IP有效性
我们利用某度进行检测,将ip传入proxies中去验证,如果返回的state_code = 200,在规定的时间内,就说明这个ip是有效的。否则就报错,这里用try、except 结构避免报错后无法继续跑程序的问题。

def check_ip(reg):url = 'https://www.baidu.com/'headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}can_use = []for i in reg:try:response = requests.get(url,headers,proxies = i,timeout = 1)if response.status_code == 200:can_use.append(i)except Exception as e:print('出现问题',e)return can_use

接下来就是保存自己爬取的ip

def save_ip(data):with open('ip.txt','w+') as f:for i in data:f.write(str(i)+'\n')f.close()

完整代码如下

import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
import time
ip = []
port = []
type = []
def get_url(page):for i in range(int(page)):try:print('正在爬取第%d页'%(i+1))url = 'https://www.kuaidaili.com/free/inha/{}/'.format(i+1)print("爬取网址为:",url)IP1,PORT1,TYPE1=get_content(url)process_data(IP1,PORT1,TYPE1)print('休息一下')time.sleep(3)#防止访问频率过快,被封except Exception as e:print('爬取失败',e)
def get_content(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}response = requests.get(url,headers=headers)if response.status_code == 200:print('连接正常')soup = BeautifulSoup(response.text,'lxml')contents = soup.find_all('td')IP = []PORT = []TYPE = []for content in contents:content = str(content)if re.findall(r'[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*',content):IP.append(re.findall(r'[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*',content))elif re.findall(r'<td data-title="PORT">',content):PORT.append(re.findall(r'\d{4}',content))elif re.findall(r'<td data-title="类型">',content):TYPE.append(re.findall('[A-Z]{4,5}',content))return IP,PORT,TYPEelse:print('连接失败或遭遇反爬')
def process_data(IP,PORT,TYPE):for content in IP:ip.append(content[0])for content in PORT:port.append(content[0])for content in TYPE:type.append(content[0])reg = []for i in range(len(ip)):dic ={}dic[type[i]] = ip[i]+':'+port[i]reg.append(dic)can_use = check_ip(reg)print('有用的ip数量为:',len(can_use))save_ip(can_use)
def check_ip(reg):url = 'https://www.baidu.com/'headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}can_use = []for i in reg:response = requests.get(url,headers,proxies = i,timeout = 1)if response.status_code == 200:can_use.append(i)return can_use
def save_ip(data):with open('ip.txt','w+') as f:for i in data:f.write(str(i)+'\n')f.close()
if __name__ == '__main__':page = input('爬取页数:')get_url(page)print('爬取完成')

运行效果及爬取内容如下:

如何使用自定义的ip池

拥有了自己的ip池,接下来就是如何使用这个问题了。
新建一个py文件
我创建的文件名是ip.py

import random
def random_ip():with open(r'D:\python项目\爬虫\代理池\ip.txt','r') as f:#这里打开的就是你之前爬取ip保存的地址data = f.readlines()f.close()reg = []for i in data:k = eval(i)#将字符串转化为字典形式reg.append(k)ip = random.choice(reg)#随机从reg这个存储了多个ip的list 里返回一个ip地址return ip
if __name__ =='__main__':random_ip()

接下来就是导入自己定义的模块了,以便之后爬虫时随时调用一个ip,而不用再把这个程序写一次。
在python安装路径的site-packets目录下建立xx.pth(xx为文件名).然后将此文件的根目录(最接近的包目录)复制到此pth文件中即可。

然后就是import 自己定义的模块就好了。
运行效果,新建一个py文件,导入自定义的ip.py模块。

import ip
for k in range(10):i = ip.random_ip()print(i)

运行效果:

随机返回一个ip地址

好了今天的分享就到此为止了。
我是vasy 一只菜鸡
转载请声明出处谢谢。

## 功能快捷键撤销:<kbd>Ctrl/Command</kbd> + <kbd>Z</kbd>
重做:<kbd>Ctrl/Command</kbd> + <kbd>Y</kbd>
加粗:<kbd>Ctrl/Command</kbd> + <kbd>B</kbd>
斜体:<kbd>Ctrl/Command</kbd> + <kbd>I</kbd>
标题:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>H</kbd>
无序列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>U</kbd>
有序列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>O</kbd>
检查列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>C</kbd>
插入代码:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>K</kbd>
插入链接:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>L</kbd>
插入图片:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>G</kbd>
查找:<kbd>Ctrl/Command</kbd> + <kbd>F</kbd>
替换:<kbd>Ctrl/Command</kbd> + <kbd>G</kbd>## 合理的创建标题,有助于目录的生成直接输入1次<kbd>#</kbd>,并按下<kbd>space</kbd>后,将生成1级标题。
输入2次<kbd>#</kbd>,并按下<kbd>space</kbd>后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用`TOC`语法后生成一个完美的目录。## 如何改变文本的样式*强调文本* _强调文本_**加粗文本** __加粗文本__==标记文本==~~删除文本~~> 引用文本H~2~O is是液体。2^10^ 运算结果是 1024.## 插入链接与图片链接: [link](https://www.csdn.net/).图片: ![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw)带尺寸的图片: ![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw =30x30)居中的图片: ![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center)居中并且带尺寸的图片: ![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center =30x30)当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。## 如何插入一段漂亮的代码片去[博客设置](https://mp.csdn.net/console/configBlog)页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 `代码片`.
```javascript
// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目

    • 项目

      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过欧拉积分

Γ(z)=∫0∞tz−1e−tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞​tz−1e−tdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

搭建简易IP代理池及使用方法相关推荐

  1. Python搭建自己[IP代理池]

    IP代理是什么: ip就是访问网页数据服务器位置信息,每一个主机或者网络都有一个自己IP信息 为什么要使用代理ip: 因为在向互联网发送请求中,网页端会识别客户端是真实用户还是爬虫程序,在今天以互联网 ...

  2. python爬虫:多线程收集/验证IP从而搭建有效IP代理池

    文章目录 搭建代理IP池 (1)IP来源 (2)初步收集IP (3)可用性检验 (4)IP池存储展示 (5)单线程IP池完整实现 (6)多线程IP验证 搭建代理IP池 (1)IP来源 了解到代理IP及 ...

  3. 利用云函数搭建简易的代理池

    本次介绍的是如何快速的利用腾讯云函数来搭建免费的代理池. 很多小伙伴在测试的过程中经常遇到一个问题,被频繁的封ip,当然了我说的是有授权的情况下,请不要做非法使用,因为云函数只能保证你的Ip是流动的但 ...

  4. Python 实现搭建本地IP代理池

    本文仅供学习交流使用,如侵立删!demo下载见文末 爬取:66ip免费代理 def get_66ip(self):"""抓取66ip免费代理:return:"& ...

  5. 手把手教你用Python搭建IP代理池,轻松破解请求频率限制反爬虫~

    我们所写的爬虫,它对服务器发出的网络请求频率要比正常用户的高的多,从而开发者可以将请求频率过高的用户视为爬虫程序,从而来限制爬虫程序. 今天志斌就来给大家分享一下,如何用Python搭建一个IP代理池 ...

  6. 手把手教你用Python搭建IP代理池

    今天给大家分享一下,如何用Python搭建一个IP代理池,来破解服务器通过对用户请求频率进行限制的反爬虫. 01 原理 因为客户端的IP地址是唯一的,所以开发者便将IP地址作为客户端的身份标识. 服务 ...

  7. Scrapy ip代理池

    一.概述 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制,即在某一时间段内,当某个ip的访问次数达到一定的阀值时,该ip就会被拉黑.在一段时间内禁止访问. 应对的方法有两种: 1. 降低爬 ...

  8. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫...

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,这样很容易被服务器封IP,因此需要设置IP代理,但又不想花钱买,网上有免费IP代理,但大多都数都是不可 ...

  9. Python爬虫实战之:快代理搭建IP代理池(简版)

    目录 前言 项目背景 项目简介 前期准备 讲解1:项目搭建 讲解2:安装 faker 库获取user-agent 讲解3:分析 "快代理" 页面 讲解4:筛选有效IP 讲解5:Pa ...

最新文章

  1. eclipse配置springboot开发
  2. Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】...
  3. RNA干扰各种方法优缺点简介?
  4. python不同曲线设置标签_【图像分类】基于Pascal VOC2012增强数据的多标签图像分类实战...
  5. Java中List的排序
  6. 【codevs3160】 LCS 【后缀自动机】
  7. 新建jsp报错“The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path”...
  8. 微信公众平台获取用户地理位置之开发文档详解
  9. macOS 工具 - 查看PKG文件内容:SuspiciousPackage 使用方法
  10. 特征图注意力_【抠图中的注意力机制】HAttMatting---让抠图变得如此简单!
  11. 华为网络专家的求学之路的第三步
  12. 【Groovy】Json、Xml、Swing 生成器 ( Json 生成器 JsonBuilder | Xml 生成器 MarkupBuilder | Swing 生成器 SwingBuilder)
  13. ATECC508A芯片开发笔记(九):加密读写508芯片数据的流程及相应设置
  14. hibernate lazy属性参数说明
  15. AJAX学习笔记——发送AJAX的POST请求,模拟from表单提交
  16. python 全栈开发,Day43(python全栈11期月考题)
  17. 将Helm编写的Chart推送到Harbor仓库
  18. java实训五子棋_Java棋类游戏实践之单机版五子棋
  19. iOS Masonry
  20. c#第二课,气泡屏保

热门文章

  1. 爬虫-代理和selenium
  2. android导出vCard联系人流程
  3. 空间转换-3D-在空间中的位移、旋转、缩放
  4. flink 学习(一)java 整合 flink
  5. shell basename 可以去除文件名后缀
  6. 腾讯地图:PC端将于11月11日停止服务
  7. 驱动——IIC子系统(一)
  8. 名帖355 宋徽宗赵佶 草书《千字文》
  9. 组合三位数c语言第八周,C语言教案-第八周教学提纲.doc
  10. sklearn 降维方法概述