搭建简易IP代理池及使用方法
搭建简易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
- 项目2
- 项目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.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎
搭建简易IP代理池及使用方法相关推荐
- Python搭建自己[IP代理池]
IP代理是什么: ip就是访问网页数据服务器位置信息,每一个主机或者网络都有一个自己IP信息 为什么要使用代理ip: 因为在向互联网发送请求中,网页端会识别客户端是真实用户还是爬虫程序,在今天以互联网 ...
- python爬虫:多线程收集/验证IP从而搭建有效IP代理池
文章目录 搭建代理IP池 (1)IP来源 (2)初步收集IP (3)可用性检验 (4)IP池存储展示 (5)单线程IP池完整实现 (6)多线程IP验证 搭建代理IP池 (1)IP来源 了解到代理IP及 ...
- 利用云函数搭建简易的代理池
本次介绍的是如何快速的利用腾讯云函数来搭建免费的代理池. 很多小伙伴在测试的过程中经常遇到一个问题,被频繁的封ip,当然了我说的是有授权的情况下,请不要做非法使用,因为云函数只能保证你的Ip是流动的但 ...
- Python 实现搭建本地IP代理池
本文仅供学习交流使用,如侵立删!demo下载见文末 爬取:66ip免费代理 def get_66ip(self):"""抓取66ip免费代理:return:"& ...
- 手把手教你用Python搭建IP代理池,轻松破解请求频率限制反爬虫~
我们所写的爬虫,它对服务器发出的网络请求频率要比正常用户的高的多,从而开发者可以将请求频率过高的用户视为爬虫程序,从而来限制爬虫程序. 今天志斌就来给大家分享一下,如何用Python搭建一个IP代理池 ...
- 手把手教你用Python搭建IP代理池
今天给大家分享一下,如何用Python搭建一个IP代理池,来破解服务器通过对用户请求频率进行限制的反爬虫. 01 原理 因为客户端的IP地址是唯一的,所以开发者便将IP地址作为客户端的身份标识. 服务 ...
- Scrapy ip代理池
一.概述 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制,即在某一时间段内,当某个ip的访问次数达到一定的阀值时,该ip就会被拉黑.在一段时间内禁止访问. 应对的方法有两种: 1. 降低爬 ...
- 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫...
前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,这样很容易被服务器封IP,因此需要设置IP代理,但又不想花钱买,网上有免费IP代理,但大多都数都是不可 ...
- Python爬虫实战之:快代理搭建IP代理池(简版)
目录 前言 项目背景 项目简介 前期准备 讲解1:项目搭建 讲解2:安装 faker 库获取user-agent 讲解3:分析 "快代理" 页面 讲解4:筛选有效IP 讲解5:Pa ...
最新文章
- eclipse配置springboot开发
- Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】...
- RNA干扰各种方法优缺点简介?
- python不同曲线设置标签_【图像分类】基于Pascal VOC2012增强数据的多标签图像分类实战...
- Java中List的排序
- 【codevs3160】 LCS 【后缀自动机】
- 新建jsp报错“The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path”...
- 微信公众平台获取用户地理位置之开发文档详解
- macOS 工具 - 查看PKG文件内容:SuspiciousPackage 使用方法
- 特征图注意力_【抠图中的注意力机制】HAttMatting---让抠图变得如此简单!
- 华为网络专家的求学之路的第三步
- 【Groovy】Json、Xml、Swing 生成器 ( Json 生成器 JsonBuilder | Xml 生成器 MarkupBuilder | Swing 生成器 SwingBuilder)
- ATECC508A芯片开发笔记(九):加密读写508芯片数据的流程及相应设置
- hibernate lazy属性参数说明
- AJAX学习笔记——发送AJAX的POST请求,模拟from表单提交
- python 全栈开发,Day43(python全栈11期月考题)
- 将Helm编写的Chart推送到Harbor仓库
- java实训五子棋_Java棋类游戏实践之单机版五子棋
- iOS Masonry
- c#第二课,气泡屏保