教你自己搭建一个IP池(绝对超好用!!!!)

这篇具有很好参考价值的文章主要介绍了教你自己搭建一个IP池(绝对超好用!!!!)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随着我们爬虫的速度越来越快,很多时候,有人发现,数据爬不了啦,打印出来一看。

不返回数据,而且还甩一句话
教你自己搭建一个IP池(绝对超好用!!!!)

是不是很熟悉啊?

要想想看,人是怎么访问网站的? 发请求,对,那么就会带有

request.headers,

那么当你疯狂请求别人的网站时候,人家网站的管理人员就会 觉得有点不对劲了,

他看看请求的 header 信息,一看吓一跳,结果看到的 headers 信息是这样的:

Host: 127.0.0.1:3369
User-Agent: python-requests/3.21.0
Accept-Encoding: gzip, deflate
Accept: /
Connection: keep-alive

看到:

User-Agent: python-requests/3.21.0

居然使用 python 的库来请求,说明你已经暴露了,人家不封你才怪呢?

那么怎么办呢?伪装自己呗。

python 不可以伪装,浏览器可以伪装,所以可以修改浏览器的请求头。

简单来说,就是让自己的 python 爬虫假装是浏览器。

伪装 Header的哪个地方?
要让自己的 python 爬虫假装是浏览器,我们要伪装headers,那么headers里面有很多字段,我们主要注意那几个呢?
headers数据通常用这两个即可,强烈推荐在爬虫中为每个request都配个user-agent,而’Referer’如果需要就加,不需要就不用。(Referer是什么?后面补充知识点)

图示:
教你自己搭建一个IP池(绝对超好用!!!!)

上面几个重要点解释如下:

Requests Headers:
• “吾是人!”——修改user-agent:里面储存的是系统和浏览器的型号版本,通过修改它来假装自己是人。

• “我从台湾省来”——修改referer:告诉服务器你是通过哪个网址点进来的而不是凭空出现的,有些网站会检查。

• “饼干!”:——带上cookie,有时带不带饼干得到的结果是不同的,试着带饼干去“贿赂”服务器让她给你完整的信息。
3.headers的伪装—随机User-Agent
爬虫机制:很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)

随机User-Agent生成 :生成一个随机的User-Agent,这样你就可以是很多不同的浏览器模样。

(代码现成的,复制拿去用即可)

#!/usr/bin/python3

#@Readme : 反爬之headers的伪装

对于检测Headers的反爬虫

from fake_useragent import UserAgent # 下载:pip install fake-useragent

ua = UserAgent() # 实例化,需要联网但是网站不太稳定-可能耗时会长一些

1.生成指定浏览器的请求头

print(ua.ie)
print(ua.opera)
print(ua.chrome)
print(ua.google)
print(ua.firefox)
print(ua.safari)

随机打印一个浏览器的User-Agent

print(ua.random)
print(‘完毕。’)

2.在工作中常用的则是ua.random方式

import requests
ua = UserAgent()
print(ua.random) # 随机产生

headers = {
‘User-Agent’: ua.random # 伪装
}

请求

url = ‘https://www.baidu.com/’
response = requests.get(url, headers=headers)
print(response.status_code)

Referer的伪装:

如果想爬图片,图片反盗链的话就要用到Referer了。
headers = {‘User-Agent’:ua.random,‘Referer’:‘这里放入图片的主页面’}
如果遇到防盗链的图片,一般思路就是先爬到所有图片的地址.jpg —–>将它们储存在列表中 —–>遍历访问图片地址,然后用 ‘wb’的格式打开文件写入,文件名根据图片地址动态改变。

这个基本上如果你的爬虫对象不是很严肃的图片网站,都不会用到。

4.2.1 自建的IP代理池
多线程爬虫
就是自己去收集网上公开的免费ip,自建起 自己的ip代理池。
就是通过 python 程序去抓取网上大量免费的代理 ip , 然后定时的去检测这些 ip 可不可以用,那么下次你要使用代理 ip 的时候,你只需要去自己的 ip 代理池里面拿就行了。
简单来说:访问免费代理的网站 —> 正则/xpath提取 ip和端口—> 测试ip是否可用 》》可用则保存 》》使用ip爬虫 > 过期,抛弃ip。

这个过程可以使用多线程或异步的方式,因为检测代理是个很慢的过程。

这是来源于网络的一个西刺代理的多线程ip代理爬虫:(我不用)

#!/usr/bin/python3

#@Readme : IP代理==模拟一个ip地址去访问某个网站(爬的次数太多,ip被屏蔽)

多线程的方式构造ip代理池。

from bs4 import BeautifulSoup
import requests
from urllib import request, error
import threading

import os
from fake_useragent import UserAgent

inFile = open(‘proxy.txt’) # 存放爬虫下来的ip
verifiedtxt = open(‘verified.txt’) # 存放已证实的可用的ip

lock = threading.Lock()

def getProxy(url):
# 打开我们创建的txt文件
proxyFile = open(‘proxy.txt’, ‘a’)

# 伪装
ua = UserAgent()
headers = {
    'User-Agent': ua.random
}

# page是我们需要获取多少页的ip,这里我们获取到第9页
for page in range(1, 10):
    # 通过观察URL,我们发现原网址+页码就是我们需要的网址了,这里的page需要转换成str类型
    urls = url + str(page)
    # 通过requests来获取网页源码
    rsp = requests.get(urls, headers=headers)
    html = rsp.text
    # 通过BeautifulSoup,来解析html页面
    soup = BeautifulSoup(html,'html.parser')
    # 通过分析我们发现数据在 id为ip_list的table标签中的tr标签中
    trs = soup.find('table', id='ip_list').find_all('tr')  # 这里获得的是一个list列表
    # 我们循环这个列表
    for item in trs[1:]:
        # 并至少出每个tr中的所有td标签
        tds = item.find_all('td')
        # 我们会发现有些img标签里面是空的,所以这里我们需要加一个判断
        if tds[0].find('img') is None:
            nation = '未知'
            locate = '未知'
        else:
            nation = tds[0].find('img')['alt'].strip()
            locate = tds[3].text.strip()
        # 通过td列表里面的数据,我们分别把它们提取出来
        ip = tds[1].text.strip()
        port = tds[2].text.strip()
        anony = tds[4].text.strip()
        protocol = tds[5].text.strip()
        speed = tds[6].find('div')['title'].strip()
        time = tds[8].text.strip()
        # 将获取到的数据按照规定格式写入txt文本中,这样方便我们获取
        proxyFile.write('%s|%s|%s|%s|%s|%s|%s|%s\n' % (nation, ip, port, locate, anony, protocol, speed, time))

def verifyProxyList():
verifiedFile = open(‘verified.txt’, ‘a’)

while True:
    lock.acquire()
    ll = inFile.readline().strip()
    lock.release()
    if len(ll) == 0: break
    line = ll.strip().split('|')
    ip = line[1]
    port = line[2]
    realip = ip + ':' + port
    code = verifyProxy(realip)
    if code == 200:
        lock.acquire()
        print("---Success成功:" + ip + ":" + port)
        verifiedFile.write(ll + "\n")
        lock.release()
    else:
        print("---Failure失败:" + ip + ":" + port)

def verifyProxy(ip):
‘’’
验证代理的有效性
‘’’
ua = UserAgent()
requestHeader = {
‘User-Agent’: ua.random
}
url = “http://www.baidu.com”
# 填写代理地址
proxy = {‘http’: ip}
# 创建proxyHandler
proxy_handler = request.ProxyHandler(proxy)
# 创建opener
proxy_opener = request.build_opener(proxy_handler)
# 安装opener
request.install_opener(proxy_opener)

try:
    req = request.Request(url, headers=requestHeader)
    rsq = request.urlopen(req, timeout=5.0)
    code = rsq.getcode()
    return code
except error.URLError as e:
    return e

if name == ‘main’:
# 手动新建两个文件
filename = ‘proxy.txt’
filename2 = ‘verified.txt’
if not os.path.isfile(filename):
inFile = open(filename, mode=“w”, encoding=“utf-8”)
if not os.path.isfile(filename2):
verifiedtxt = open(filename2, mode=“w”, encoding=“utf-8”)
tmp = open(‘proxy.txt’, ‘w’)
tmp.write(“”)
tmp.close()
tmp1 = open(‘verified.txt’, ‘w’)
tmp1.write(“”)
tmp1.close()
# 多线程爬虫西刺代理网,找可用ip
getProxy(“http://www.xicidaili.com/nn/”)
getProxy(“http://www.xicidaili.com/nt/”)
getProxy(“http://www.xicidaili.com/wn/”)
getProxy(“http://www.xicidaili.com/wt/”)

all_thread = []
for i in range(30):
    t = threading.Thread(target=verifyProxyList)
    all_thread.append(t)
    t.start()

for t in all_thread:
    t.join()

inFile.close()
verifiedtxt.close()

运行一下,效果:
教你自己搭建一个IP池(绝对超好用!!!!)

爬出来的可用的很少或者很短:

重点来了!!!!!!!!!
4.2.3 开源 ip代理池—ProxyPool(吐血推荐)
类比线程池,进程池,懂了吧?
这是俺发现的一个不错的开源 ip 代理池ProxyPool,可以用windows系统的,至少Python3.5以上环境哟,还需要将Redis服务开启。

现成的代理池,还不用起来?

ProxyPool下载地址:

https://github.com/Python3WebSpider/ProxyPool.git

(可以手动下载也可以使用git下来。)

1.ProxyPool的使用:

首先使用 git clone 将源代码拉到你本地,
教你自己搭建一个IP池(绝对超好用!!!!)

3.进入proxypool目录,修改settings.py文件,PASSWORD为Redis密码,如果为空,则设置为None。(新装的redis一般没有密码。)

(如果你没 redis 的话,可以先去下载了安装了再来看吧。)

(假设你的redis已经安装完成。)

4.接着在你 clone 下来的文件目录中(就是这个ProxyPool存的电脑路径 )

5.安装相关所需的 依赖包:
(pip或pip3)

pip install -r requirements.txt

(如果你把ProxyPool导入在pycharm里面,那就一切都在pycharm里面搞就可以了。
教你自己搭建一个IP池(绝对超好用!!!!)

6.接下来开启你的 redis服务,

直接cmd 打开dos窗口,运行:redis-server.exe
即可开启redis服务器。redis 的默认端口就是 6379
教你自己搭建一个IP池(绝对超好用!!!!)

7.接着就可以运行 run.py 了。

可以在cmd里面命令方式运行,也可以导入pycharm里面运行。

图示:
教你自己搭建一个IP池(绝对超好用!!!!)

8.运行 run.py 以后,你可以打开你的redis管理工具,或者进入redis里面查看,这时候在你的 redis 中就会存入很多已经爬取到的代理 ip 了:
教你自己搭建一个IP池(绝对超好用!!!!)

9.项目跑起来之后,【不要停止】,此时redis里面存了ip,就可以访问这个代理池了。

在上面的图中,可以看到有这么一句话

Running on http://0.0.0.0:5555/ (Press CTRL+C to quit)
这就是告诉我们随机访问地址URL是多少。
10.在浏览器中随机获取一个代理 ip 地址:

你就浏览器输入:

http://0.0.0.0:5555/random
1
教你自己搭建一个IP池(绝对超好用!!!!)

11.在代码中随机获取一个ip代理

就这样:

import requests

随机ip代理获取

PROXY_POOL_URL = ‘http://localhost:5555/random’
def get_proxy():
try:
response = requests.get(PROXY_POOL_URL)
if response.status_code == 200:
return response.text
except ConnectionError:
return None

if name == ‘main’:
print(get_proxy())

教你自己搭建一个IP池(绝对超好用!!!!)

好了。到此结束了。

使用这个 ip代理池,目前来说是最好的了,又免费又高效唉~~~

5.报错解决
安装的时候,如果报错类似于如下:

AttributeError: ‘int’ object has no attribute 'items

更新一下 对应的xxx软件版本,比如redis 版本:

pip install redis==3.33.1

最后给一个REDIS DESKTOP MANAGER安装教程:
Redis 服务安装与配置

1.下载解压

先下载Redis:

https://github.com/ServiceStack/redis-windows/tree/master/downloads
教你自己搭建一个IP池(绝对超好用!!!!)
教你自己搭建一个IP池(绝对超好用!!!!)

下载完后解压到任意路径下(我的是D:\SoftWare\Redis-3.0)

2.启动redis服务器

进入解压后的文件夹,然后运行redis-server.exe文件。
 教你自己搭建一个IP池(绝对超好用!!!!)
教你自己搭建一个IP池(绝对超好用!!!!)

注意:该窗口不可关闭,否则,Redis服务不可用!

现在再从Redis Desktop Manager进行连接就可以成功了!
教你自己搭建一个IP池(绝对超好用!!!!)

3.启动redis客户端

直接双击D:\SoftWare\Redis-3.0目录下的redis-cli.exe文件(redis客户端),如果显示127.0.0.1:6379> ,就说明客户端运行成功。
 教你自己搭建一个IP池(绝对超好用!!!!)

4.修改密码

redis默认是空密码,但是这样在项目上线后是不安全的,容易被入侵,所以要设置密码。

1)打开redis.windows.conf文件,找到# requirepass foobared 这行,在此行下增加一行requirepass 所设置的密码 ,保存。

教你自己搭建一个IP池(绝对超好用!!!!)

//此处注意,密码自定义就行,并且行前不能有空格!

2)打开cmd(windows命令窗口),切换到redis-server.exe目录下。

3)输入命令:redis-server.exe redis.windows.conf启动redis,即可使用密码了。
教你自己搭建一个IP池(绝对超好用!!!!)

4)客户端测试:

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> auth redis //会报以下错误
(error) ERR Client sent AUTH, but no password is set
127.0.0.1:6379> CONFIG SET requirepass “redis” //执行此行指令即可解决错误
OK
127.0.0.1:6379> auth redis
OK

5.将Redis服务安装到本地服务

由于上述启动Redis服务器的方式有点复杂,且redis服务窗口不可关闭。故这里介绍如何将Redis服务安装到Windows系统的本地服务。

在cmd下输入以下命令:

redis-server --service-install redis.conf --loglevel verbose //安装redis本地服务,指定配置文件redis.windows.conf

教你自己搭建一个IP池(绝对超好用!!!!)

6.如何卸载Redis本地服务

打开win系统命令行,依次输入下列命令:

C:\Users\lenovo>cd /d D:

D:>cd D:\SoftWare\Redis-3.0

D:\SoftWare\Redis-3.0> redis-server --service-uninstall文章来源地址https://www.toymoban.com/news/detail-411991.html

到了这里,关于教你自己搭建一个IP池(绝对超好用!!!!)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 作为前端leader,如何搭建属于我们公司自己的流水线自动化部署系统(node+express)

    背景:自动化部署系统主要可以集成到公司内部的管理系统中去,比如公司有多个项目,移动端H5,大屏网站,门户网站等...每次发布或者迭代都需要前端同事打包然后在交给运维或者后端同事放到服务器上进行部署 ,如果有一个项目多个同事合作完成 还要走git合并流程,

    2024年02月19日
    浏览(37)
  • 十分钟教你部署一个属于自己的chatgpt网站-(源码)

    下面是一个简单的十分钟教程,教你如何部署一个属于自己的ChatGPT网站,包括以下几个步骤: 获取GPT-3 API密钥:为了使用GPT-3 API接口,我们需要先获取API密钥。在OpenAI官网上申请账户并订阅GPT-3服务后,即可获得API密钥。 创建Flask应用程序:Flask是一款Python Web框架,我们可以

    2024年02月05日
    浏览(30)
  • 手把手教你实现一个JavaWeb项目:创建一个自己的网页博客系统(前端+后端)(一)

    一篇博客带你实现一个真正的项目!  先来看看它是什么样式的: 目录: 1、大体步骤🦖:         1、创建Maven项目🦕         2、引入依赖🦕         3、创建必要的目录🦕         4、编写代码🦕         5、打包部署(基于SmartTomcat)🦕         

    2024年02月06日
    浏览(43)
  • 2023短剧小程序分销cps系统搭建,教你上线自己的短剧平台

    文章目录 系统环境 一:短剧系统是什么 二:上线教程 1:部署系统 2:操作后台 总结 前端uniapp 后端php 服务器:centons7.6 mysql5.6 php7.0 ngnx1.8 提示:以下是本篇文章正文内容,下面案例可供参考 小程序演示,微信小程序搜:云微追剧  文字解释: 平时在网上看到一些很火的武侠

    2024年02月05日
    浏览(35)
  • 保姆级教程教你快速搭建属于自己的AI绘画系统!(收藏)

    Midjourney收费高、无法支付,且生成想要的图片受限,风格固定,如果能够10分钟快速搭建属于自己的AI绘画系统,并且对电脑配置无要求,你心动了吗? 先来看看AI系统构建完成后的画面,只需要输入自定义的prompt,就能生成自己想要的人像、风景、动物各种主体,科幻、油

    2024年02月03日
    浏览(41)
  • Spring Integration Ip 一个好用的TCP/UDP开发框架

    基于我的上一篇文章《Spring Integration超详细解读》,相信大家对Spring Integration已经有了基本的认识。 因此本文中,着重讲解Spring Integration Ip的实际应用。 如果是在POM中,则导入以下依赖(由于spring-integration-ip实际会引入spring-integration的依赖,因此无需再添加相关的依赖了)

    2024年01月16日
    浏览(34)
  • hMailServer 使用教程 —— 手把手教你搭建自己的邮箱服务器

    前言 假设你已经拥有了一台具有 公网ip 的服务器,以及 域名 hMailServer 介绍 hMailServer 适用于 Windows 操作系统,它除了提供邮箱系统需要的所有基础功能之外,还内置了一些常用功能,比如:反垃圾邮件、反病毒邮件,而其他未内置的功能,则可以根据用户需要,自行去社区

    2024年02月04日
    浏览(40)
  • 无基础教你快速搭建自己的网站(VPS服务器+宝塔+typecho)

    首先我们要准备好一个服务器,国内国外都可以,新手建议国内的各大服务器厂商都行(华为云、腾讯云、阿里云等等),国内的服务器大多都有学生优惠,基本不到100一年,最便宜的服务器已经足够了,当然,如果有小伙伴和我一样是学Linux开发方向的,就自己考虑用哪些

    2024年02月08日
    浏览(34)
  • 如何一键展示全平台信息?Python手把手教你搭建自己的自媒体展示平台

    灵感源于之前写过的Github中Readme.md中可以插入自己的js图片和动态api解析模块,在展示方面十分的美观: 这方面原理可以简化为,在Markdown中,你可以使用HTML标签来添加图像,就像这样: 具体来说,你可以使用 img 标签来嵌入图像,并使用 src 属性指定图像的URL。我们可以通

    2024年04月09日
    浏览(39)
  • Ubuntu20.04系统备份和恢复 -- 绝对好用

    前言 看了很多教程,多多少少都没说全,例如“如何找到分区”、如何删除原系统等等,此贴将详细讲解。 正文 首先看我的硬盘作为参考: 备份系统 第一步,在终端里进入root模式,并进入根目录: 第二步,备份系统: 注1:我把系统备份后的文件命名为:backup.tgz,也可以

    2024年02月20日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包