当前位置: 首页 > news >正文

Python爬虫与MongoDB的完美结合

🔸 Windows和Linux下MongoDB环境搭建

Windows下安装MongoDB
  1. 访问MongoDB官网,下载适用于Windows的MongoDB安装包。
  2. 双击安装包,选择"Complete"安装类型。
  3. 设置安装路径和数据存储路径,完成安装。

完成安装后,启动MongoDB服务:

"C:\Program Files\MongoDB\Server\4.4\bin\mongod.exe" --dbpath "C:\data\db"
Linux下安装MongoDB

在Linux系统下,通过包管理器安装MongoDB:

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org

启动MongoDB服务:

sudo systemctl start mongod
sudo systemctl enable mongod

🔸 MongoDB写入规范

在Python中使用pymongo库写入数据到MongoDB:

import pymongo# 连接到MongoDB
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["articles"]# 插入单条数据
article = {"title": "文章标题","author": "作者名","content": "文章内容","url": "http://example.com/article","created_at": datetime.datetime.now()
}
collection.insert_one(article)# 插入多条数据
articles = [{"title": "文章标题1","author": "作者名1","content": "文章内容1","url": "http://example.com/article1","created_at": datetime.datetime.now()},{"title": "文章标题2","author": "作者名2","content": "文章内容2","url": "http://example.com/article2","created_at": datetime.datetime.now()}
]
collection.insert_many(articles)

🔹 在这个示例中,我们使用insert_one方法插入单条数据,使用insert_many方法插入多条数据。


🔸 MongoDB对接爬虫实战

将以上知识结合起来,构建一个简单的爬虫,并将爬取到的数据存储到MongoDB中:

import requests
from bs4 import BeautifulSoup
import pymongo
import datetime# 爬取网页数据
url = 'http://example.com/articles'
response = requests.get(url)
html_content = response.content
soup = BeautifulSoup(html_content, 'html.parser')# 连接到MongoDB
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["articles"]# 解析并插入数据
articles = soup.find_all('div', class_='article')
for article in articles:title = article.find('h1').textauthor = article.find('span', class_='author').textcontent = article.find('p', class_='content').texturl = article.find('a')['href']article_data = {"title": title,"author": author,"content": content,"url": url,"created_at": datetime.datetime.now()}collection.insert_one(article_data)

🔹 在这个示例中,我们爬取网页中的文章数据,并将其插入到MongoDB的articles集合中,实现了爬虫和数据库的完美对接。


🔸 MongoDB优化

为了提升MongoDB的性能,可以考虑以下优化措施:

  1. 索引优化:为常用的查询字段添加索引,例如文章集合中的titleurl字段。

    collection.create_index([("title", pymongo.TEXT)])
    collection.create_index([("url", pymongo.ASCENDING)], unique=True)
    
  2. 批量插入:一次性插入多条记录,减少写入操作次数。

    articles = [{"title": "标题1","author": "作者1","content": "内容1","url": "http://example.com/1","created_at": datetime.datetime.now()},{"title": "标题2","author": "作者2","content": "内容2","url": "http://example.com/2","created_at": datetime.datetime.now()}
    ]
    collection.insert_many(articles)
    
  3. 查询优化:使用适当的查询语句,避免全集合扫描。

    articles = collection.find({"title": {"$regex": "^Python"}}).limit(10)
    for article in articles:print(article)
    

🔹 通过这些优化措施,可以显著提升MongoDB的性能和查询效率。


🔸 总结

🔹 通过本次学习,我们掌握了在Windows和Linux系统下安装MongoDB,设计适合爬虫存储数据的写入规范,并通过实际爬虫示例展示了如何将爬取到的数据存储到MongoDB中。此外,还进行了MongoDB性能优化,提高了数据存储和查询的效率。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《零散知识点 · 自定义 HandleMapping》
  • 鸿蒙媒体开发【相机数据采集保存】拍照和图片
  • 大模型术语表
  • 24年第五届“华数杯”数学建模竞赛浅析
  • 利用ffmpeg转码视频为gif图片,调整gif图片的大小
  • 全球氢燃料电池汽车市场规划预测:未来六年CAGR为44.4%
  • 前端-防抖代码
  • App推广新利器:Xinstall携带参数安装功能详解
  • FIR低通滤波器
  • 可验证随机函数 vrf 概述
  • Boost:asio网络编程从同步到异步
  • 【C++】函数重载
  • idea个人常用快捷键设置
  • 掌握PyCharm代码格式化秘籍:提升代码质量的终极指南
  • vue3: vuedraggable 的使用方法(正常数据的基本使用与树结构数据递归使用)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • golang 发送GET和POST示例
  • HashMap剖析之内部结构
  • node学习系列之简单文件上传
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • react-native 安卓真机环境搭建
  • 搭建gitbook 和 访问权限认证
  • 两列自适应布局方案整理
  • 爬虫模拟登陆 SegmentFault
  • 前端设计模式
  • 前端学习笔记之观察者模式
  • 事件委托的小应用
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 2017年360最后一道编程题
  • ​浅谈 Linux 中的 core dump 分析方法
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (NSDate) 时间 (time )比较
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (层次遍历)104. 二叉树的最大深度
  • (论文阅读40-45)图像描述1
  • (十六)一篇文章学会Java的常用API
  • (四)事件系统
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一) storm的集群安装与配置
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)ObjectiveC 深浅拷贝学习
  • .net 按比例显示图片的缩略图
  • .Net7 环境安装配置
  • .NET基础篇——反射的奥妙
  • .NET企业级应用架构设计系列之开场白
  • /proc/vmstat 详解
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [Android]Tool-Systrace
  • [ARM]ldr 和 adr 伪指令的区别
  • [C++]AVL树怎么转
  • [C++]Leetcode17电话号码的字母组合
  • [Doc][px4][ros2][gazebo][yolov8]PX4-ROS2-Gazebo-YOLOv8