【python】如何把爬取到的代理ip写入到mongoDB

爬取ip代理网站并提取可用ip 这里以爬取快代理网站代理ip为例 运行环境: 操作系统:windows 开发工具;pycharm 2019 所用库:requests, parsel 难度系数:一星 一、先上图看最终效果 二、需要了解的知识点: 1.导入库 import requests import parsel 如果导入库下面有红线,说明你还没有安装这个库,pycharm下找到最下方的Terminal 进行库的安装 下面看到有successful就是安装成功了,我这里因为先前安装过,所以他会显示已经存在不会显示安装成功,对了安 阅读详情

之前的 博文 是把代理ip写入到txt文件中,然而真实情景中,写入数据比较方便以后调用。

还和之前一样,我先把我遇到的问题说一下:

1.这里必须先安装 pymongo,选择以下其中一种即可,我用的是pip install --upgrade pymongo

2.然后数据库更新后手动刷一下才看到新的数据

# 安装

pip install pymongo

# 升级

pip install --upgrade pymongo

这里先看一个简单的例子,数据是如何写入到mongoDB的: 

import pymongo
from pymongo import MongoClient
#1.链接本地数据库服务
name = MongoClient('localhost')
#2.链接本地数据库 demo 没有会创建
db = name.demo   #demo数据库名
#3.创建,连接集合
emp = db.employees  #employees集合名
#4.根据情况清空聚合
emp.remove(None)
#emp.delete_one()
#emp.delete_many({})
#5.创建一条数据
zhangsan = {
    'name':'张三',
    'age':30,
    'sex':'男',
    'contect':{
    'email':'abc@qq.com',
    'phine':'12345678910'
    }
}
#5.1增加一条数据
emp.insert_one(zhangsan)
#5.2增加多条数据
emp.insert_many([
    {
    'name':'李四',
    'habit':{
        'habit1':'eat',
        'habit2':'sleep'
        }
    },
    {
    'name':'王五',
    'age':20,
    'sex':'男'
    },
    {
    'name':'张三丰',
    'age':100,
    'sex':'男',
    'contect':{
    'email':'abcdef@qq.com',
    'phine':'12345678910'
    }}
])

下面是我实现的代码(原本用于存于txt文件的代码我没注释掉 ,只注释了调用):

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests,threading,datetime
from bs4 import BeautifulSoup
import random
import pymongo
from pymongo import MongoClient

"""
1、抓取西刺代理网站的代理ip
2、并根据指定的目标url,对抓取到ip的有效性进行验证
3、最后存到指定的path
"""
# ------------------------------------------------------数据处理--------------------------------------------------------
#1.链接本地数据库服务
name = MongoClient('localhost')
#2.链接本地数据库 demo 没有会创建
db = name.demo   #demo数据库名
#3.创建,连接集合
emp = db.employees  #employees集合名
#4.根据情况清空聚合
emp.remove(None)
def writeData(path,text):
    emp.insert_one({'ip':text})


# ------------------------------------------------------文档处理--------------------------------------------------------
# 写入文档
def write(path,text):
    with open(path,'a', encoding='utf-8') as f:
        f.writelines(text)
        f.write('\n')
# 清空文档
def truncatefile(path):
    with open(path, 'w', encoding='utf-8') as f:
        f.truncate()
# 读取文档
def read(path):
    with open(path, 'r', encoding='utf-8') as f:
        txt = []
        for s in f.readlines():
            txt.append(s.strip())
    return txt
# ----------------------------------------------------------------------------------------------------------------------
# 计算时间差,格式: 时分秒
def gettimediff(start,end):
    seconds = (end - start).seconds
    m, s = divmod(seconds, 60)
    h, m = divmod(m, 60)
    diff = ("%02d:%02d:%02d" % (h, m, s))
    return diff
# ----------------------------------------------------------------------------------------------------------------------
# 返回一个随机的请求头 headers
def getheaders():
    user_agent_list = [ \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1" \
        "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", \
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", \
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", \
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", \
        "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", \
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", \
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
    ]
    UserAgent=random.choice(user_agent_list)
    headers = {'User-Agent': UserAgent}
    return headers
# -----------------------------------------------------检查ip是否可用----------------------------------------------------
def checkip(targeturl,ip):
    headers =getheaders()  # 定制请求头
    proxies = {"http": "http://"+ip, "https": "http://"+ip}  # 代理ip
    try:
        response=requests.get(url=targeturl,proxies=proxies,headers=headers,timeout=5).status_code
        if response == 200 :
            return True
        else:
            return False
    except:
        return False

#-------------------------------------------------------获取代理方法----------------------------------------------------
# 免费代理 XiciDaili
def findip(type,pagenum,targeturl,path): # ip类型,页码,目标url,存放ip的路径
    list={'1': 'http://www.xicidaili.com/nt/', # xicidaili国内普通代理
          '2': 'http://www.xicidaili.com/nn/', # xicidaili国内高匿代理
          '3': 'http://www.xicidaili.com/wn/', # xicidaili国内https代理
          '4': 'http://www.xicidaili.com/wt/'} # xicidaili国外http代理
    url=list[str(type)]+str(pagenum) # 配置url
    headers = getheaders() # 定制请求头
    html=requests.get(url=url,headers=headers,timeout = 5).text
    soup=BeautifulSoup(html,'lxml')
    all=soup.find_all('tr',class_='odd')
    for i in all:
        t=i.find_all('td')
        ip=t[1].text+':'+t[2].text
        is_avail = checkip(targeturl,ip)
        if is_avail == True:
            # write(path=path,text=ip)
            writeData(path=path, text=ip)
            print(ip)

#-----------------------------------------------------多线程抓取ip入口---------------------------------------------------
def getip(targeturl,path):
     # truncatefile(path) # 爬取前清空文档
     start = datetime.datetime.now() # 开始时间
     threads=[]
     for type in range(4):   # 四种类型ip,每种类型取前1页
         for pagenum in range(1):
             t=threading.Thread(target=findip,args=(type+1,pagenum+1,targeturl,path))
             threads.append(t)
     print('开始爬取代理ip')
     for s in threads: # 开启多线程爬取
         s.start()
     for e in threads: # 等待所有线程结束
         e.join()
     print('爬取完成')
     end = datetime.datetime.now() # 结束时间
     diff = gettimediff(start, end)  # 计算耗时
     # ips = read(path)  # 读取爬到的ip数量
     # print('一共爬取代理ip: %s 个,共耗时: %s \n' % (len(ips), diff))

#-------------------------------------------------------启动-----------------------------------------------------------
if __name__ == '__main__':
    path = 'ip.txt' # 存放爬取ip的文档path
    targeturl = 'http://www.cnblogs.com/TurboWay/' # 验证ip有效性的指定url
    getip(targeturl,path)

效果如下:

参考:

Python爬虫——怎么搭建和维护一个本地IP池 代理IP池是一种由多个代理IP构成的集合,可以通过接口等方式随时获取可用的代理IP。通俗地打个比方,它就是一个池子,里面装了很多代理ip。代理IP具有以下几个特征:1、池子里的ip是有生存周期的,它们将被定期验证,其中失效的将被剔除。2、池子里的ip是有补充渠道的,不断会有新的代理ip加入其中。3、池子中的代理ip是可以被随机取出来使用的。这样,代理池中始终有多个不断更换的、有效的代理ip,且我们可以无间隔随机从池子中取出代理ip,然后让爬虫程序使用代理ip访问目标网站, 阅读详情

相关推荐

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

一、前言在网络爬虫中,IP代理池的作用非常重要。网络爬虫需要大量的IP地址来发送请求,同时为了降低被封禁的风险,使用代理IP来发送请求也是一个不错的选择。但是由于代理IP的性质,代理IP的可用性非常低,需要经常更新和验证。因此,本文介绍如何使用Python实现一个多线程的IP代理池,以便于我们在爬虫中使用。二、IP池的实现我们可以从各大免费IP代理网站上获取代理IP。具体获取方法可以通过网页分析获取代理IP的API接口,然后使用Python的requests库发送请求获取代理IP的列表。

Saki_Python的博客 501

Python爬虫实战(二):爬取构建代理IP池

啦啦啦

努力让自己发光,对的人才能迎着光而来 2万+

Python实现IP代理池(MondoDB和Flask实现)

ProxiesPool IP代理池 MongoDB和flask实现的一个IP代理池 源代码地址,直接下载既可以使用,已包含依赖包 https://github.com/FelixZFB/ProxiesPool 基本思路: 获取代理IP: 爬取网站的免费代理。比如西刺、快代理之类有免费代理的网站, 但是这些免费代理大多数情况下都是不好用的,所以比较靠谱的方法是购买付费代理。当然,如果你有更好的代理...

Python美丽星球--微信(Felixzfb) 979

Python爬虫IP池

在网络爬虫的世界中,IP池是一个关键的概念。它允许爬虫程序在请求网页时使用多个IP地址,从而降低被封禁的风险,提高爬虫的稳定性和效率。本文将深入探讨Python爬虫中IP池的使用,以及如何构建和维护一个可靠的IP池。

2301_82000445的博客 2057

爬虫基础篇之IP代理池

代理池介绍 由众多ip组成提供多个稳定可用代理IP的ip池。 当我们做爬虫时,最常见的反爬手段就是IP反爬,当同一个IP访问网站超出频控限制,将会被限制访问,那么代理IP池应运而生。资金充足的情况下个人建议还是付费ip代理池,比较免费ip时效性低,且难以维护。 本文将介绍通过requests库多线程抓取多个免费代理ip网站数据落库mongo后并动态维护保证IP高度可用,以API形式暴露接口获取代理IP的解决方案。 爬取流程 代理IP采集模块: 采集代理IP -> 检测代理IP ->如果不可用

onejane 5566

EtherCAT从站协议栈---- sampleappl.c 文件解析

这个源文件实际上包含该项目的入口函数main函数。 那么如何找到入口函数呢? 可以进入debug的simulator模式,选中run to main(), 当执行完启动文件startup_cm3.s后就进入了main函数(注意在main函数之前还进入了SystemInit函数), 如下图所示: 这个main函数主要架构如下: int main(void) { HW_Init(); /*PDI(过程数据接口)初始化,这里用的是MCI接.

Jiawei_Z的博客 3066

Sniper:高效且灵活的大众点评爬虫工具

Sniper:高效且灵活的大众点评爬虫工具 dianping_spider大众点评爬虫(全站可爬,解决动态字体加密,非OCR)。持续更新项目地址:https://gitcode.com/gh_mirrors/di/dianping_spider 在数据驱动的时代,获取和分析数据的能力变得尤为重要。Sniper,一款基于Python的开源爬虫工具,专为大众点评网站设计,能够高效地爬取搜索页、详情页...

gitblog_00552的博客 1104

Geant4 学习笔记(一):实现multi-thread多线程

简单修改实现Geant4多线程

weixin_52417815的博客 6083

使用python为爬虫获取免费代理ip

免费代理ip的爬取 爬虫一直是python使用的一个重要部分,而许多网站也为此做了许多反爬措施,其中爬虫访问过于频繁直接封ip地址也作为一种“伤敌一千,自损八百”的方法被许多网站采用,代理ip便可以防止这种情况出现。 搜索免费代理提供网站 提供免费代理的网站直接百度还是有很多的,这里我就选取了西刺免费代理,选取了透明代理进行爬取。 分析界面 打开网址,可以看见ip很规则的排列...

博客 2万+

AI辅助游戏开发实战:Kimi K3提升Unity开发效率与代码质量

在游戏开发领域,有限状态机(FSM)是构建角色AI行为逻辑的核心设计模式,它通过定义明确的状态和转换条件,使游戏实体能够智能地响应环境变化。其原理在于将复杂的行为分解为离散的状态节点,并通过事件驱动状态切换,从而实现清晰、可维护的AI架构。这项技术的价值在于显著提升了游戏角色的行为真实感和开发效率,被广泛应用于NPC行为控制、角色动画管理、UI流程等场景。随着AI编程助手的兴起,开发者现在可以借助如Kimi K3这类工具,通过自然语言指令快速生成和优化FSM等复杂系统的代码框架,将更多精力投入到核心玩法与性

weixin_30430677的博客 407

医药领域知识图谱快速及医药问答项目(项目全过程)

该项目是中科院软件所刘焕勇老师在github上的开源项目,基于知识图谱的医药领域问答项目 Github项目地址:mirrors / liuhuanyong / qasystemonmedicalkg · GitCode 一、项目环境搭建 该部分要十分注意,由于版本升级的问题,一些用法及格式已经不兼容了。 python3.8 下载地址:Python Release Python 3.8.10 | Python.orght...

qq_52062182的博客 9914

python爬取"快代理"和"西刺"的"国内高匿代理IP"

需求 爬取"快代理"网站里免费代理专栏的"国内高匿代理",如下图 而我们要做的就是获取IP,PORT,匿名度,类型,位置,响应速度以及最后验证时间,并验证其可用性,最后把他们存储到.txt文件,.csv文件以及mongoDB数据库中。 事先准备 pycharm开发工具(当然,如果够厉害,可以不使用IDE,直接命令行) mongoDB数据库。安装教程可自行百度或谷歌查找。这里给一个MongoDB安...

qq_40511157的博客 3883

利用GAT(图论分析工具箱)构建并分析大脑结构协变网络学习笔记

前言 前面我学习了利用DTI构建白质纤维脑网络,并采用GRETNA计算了小世界网络属性。阅读文献发现可以利用灰质体积或皮层指标(皮层厚度、折叠指数、沟深)等构建结构协变网络再进行网络拓扑属性的计算。因此,我采用前面提取的灰质体积和皮质数据进行了结构协变网络分析,特此写下笔记以便后面的学习。 一、数据准备 二、构建结构协变网络 三、全局属性的统计分析 四、局部属性的统计分析 五、网络攻击分析 六、度的分布 ..................

weixin_52073820的博客 7496

简易代理IP池的搭建

简易代理IP池搭建

weixin_43374551的博客 6755

会话管理技巧——如何优化OpenClaw的上下文理解能力(2026进阶版)

本文深入探讨了OpenClaw系统的会话管理技术,重点介绍了会话定义、生命周期管理和上下文优化策略。会话管理包含会话ID、用户信息、状态等核心要素,以及创建、维护、终止和恢复四个生命周期阶段。上下文管理通过ContextManager类实现,支持创建、更新、消息添加和变量管理等功能,并采用历史记录机制确保会话连续性。ContextOptimizer类则负责应用优化规则,通过消息和变量压缩等技术提升系统性能。这些技术共同构建了OpenClaw强大的会话管理能力,为AI助手提供了高质量的交互体验基础。

博客 489

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

算法大师! 1229

Python爬取数据并存入MongoDB

Python爬取数据并存入MongoDB 最近和朋友一起开发APP,需要大量数据,而"互联网"与"共享"融合发展的理念,遂资源的可重用给予了当代骚客文人获得感与幸福感…好了,不日白了(正宗重庆话,吹牛的意思),开始正题 Python BeautifulSoup4与requests 本人是做JavaWeb的,可能多多少少还是遗留了Java的一些格式及规范,但爬虫千千万,却是Python最好使 代码...

出奇的懒 5727

17.6 LangSmith 私有化部署实战指南:企业级AI应用的安全基石

LangSmith 私有化部署, 企业级AI开发平台, 数据隐私合规, 混合云架构, 模型监控与审计。

yonggeit的博客 3777

【虫术】资深爬虫师带你爬取代理IP

  有时候在网站看小说,会莫名跳出来一个“疑似机器恶意爬取,暂时无法访问”这样类似的网站提示,需要刷新一下或者输入一个验证码才能重新进入,这样的情况偶有发生,相信大家都有遇到过。出现这个现象的原因就是我们浏览的网页采取了反爬虫的措施,特别做爬虫爬取网页,在某个ip单位时间请求网页次数过多时,服务器会拒绝服务,这种情况就是由于访问频率引起的封ip,这种情况靠解封不能很好的解决,所以我们就想到了...

拿Q 874

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

python爬虫爬取博客_用Python爬虫抓取代理IP

目前网上有许多代理ip,有免费的也有付费的。免费的虽然不用花钱但有效的代理很少且不稳定,付费的可能会好一点 下面讲一下代理IP的试用,将可用ip存入MongoDB,方便下次取出。运行平台:WindowsPython版本:Python3.6IDE: Sublime Text其他:Chrome浏览器简述流程为:步骤1:了解requests代理如何使用步骤2:从代理网页爬取到ip和端口步骤3:检测爬取...

weixin_39664010的博客 165

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

scrapy爬取可用的代理ip

在爬虫之路上,面对反爬虫措施,我们该怎样解决呢,当然,正所谓”你有反爬策略,我也有过墙梯”,所以下面将使用scrapy来爬取免费代理ip,让我们从此不在害怕IP被封了.由于免费代理比较多,这里就以西刺代理为例 相关的代码已经上传到GitHub GitHub地址 : https://github.com/stormdony/scarpydemo,里面有一些scrapy的demo,欢迎fork和s...

DonLex 的博客 2599

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

python爬虫爬取代理ip

  最近想玩玩代理IP的刷东西怎么实现的,所以来试试(生计所迫) 这个是西刺免费代理IP http://www.xicidaili.com/ 不能保证都能用,所以爬取下来需要检验,用爬取的代理ip访问网站,看状态码,是200就证明能用 保存到MongoDB非关系型数据库保存,mysql也行 步骤: 安装Mysql数据库,过程略 python 引用 json threading Bea...

鹿先森的博客 1769

用Python爬虫抓取代理IP

不知道大家在访问网站的时候有没有遇到过这样的状况就是被访问的网站会给出一个提示,提示的显示是“访问频率太高”,如果在想进行访问那么必须要等一会或者是对方会给出一个验证码使用验证码对被访问的网站进行解封。之所以会有这样的提示是因为我们所要爬取或者访问的网站设置了反爬虫机制,比如使用同一个IP频繁的请求网页的次数过多的时候,服务器由于反爬虫机制的指令从而选择拒绝服务,这种情况单单依靠解封是比较难处理的...

weixin_43292981的博客 591

Python爬虫Scrapy爬西刺代理网站匿名ip

文章目录代理池ip爬取#0 GitHub#1 环境#2 需求#3 准备#3.1 新建一个scrapy项目#3.2 新建爬虫(在spiders目录下)#4 开始#4.1 测试目标站点反爬机制#4.2 获取下一页数据 代理池ip爬取 #0 GitHub https://github.com/Coxhuang/scrapy_proxy #1 环境 Python3.7.3 Scrapy==1.6.0 ...

Auto 1378

使用scrapy爬取免费代理ip并存入MongoDB数据库中

鸣谢:刘硕 部分代码来源于刘硕编写的《精通scrapy网络爬虫》,在此声明 通常,我们在爬取一些较大型的网站的时候,都会遇到一个非常令人头疼的事情,就是他们的反爬机制,稍微爬快一点就被封,真的很难受,爬的太慢了自己等着也烦,所以很多人都会用代理来进行爬取数据,但是,选择一个代理服务器成本比较高,所以对于我们一些平民来说,爬取一些免费的代理ip更适合我们,当然,如果资金充足,你完全可以去购买代理...

CosCXY的博客 518
上一篇: 【python】如何获取一句话中的生词,小试‘结巴分词’
下一篇: 【python】自动生成一定数量的随机请求头header,对爬虫进行伪装
gz-郭小敏
博客等级 码龄9年 39粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值