数据抓取与存储:将网络爬虫数据保存到数据库的详细指南 ...

打印 上一主题 下一主题

主题 903|帖子 903|积分 2709

在当今信息爆炸的期间,网络爬虫已经成为获取和处置惩罚数据的重要工具。将爬取的数据保存到数据库中,不仅可以有用地组织和存储数据,还可以为后续的数据分析和处置惩罚提供便利。本文将详细介绍如何将爬取的数据保存到数据库中,包罗关系型数据库和非关系型数据库的保存方法,并通过Python代码示例展示详细的实现步骤。
1. 选择合适的数据库

起首,根据数据的结构和利用需求选择合适的数据库。关系型数据库(如MySQL、PostgreSQL)适合结构化数据,非关系型数据库(如MongoDB)适合半结构化或非结构化数据。
2. 设计数据库模型

在保存数据之前,需要设计合适的数据库模型。这包罗确定命据表的结构、字段类型和索引等。
示例代码(MySQL):
  1. CREATE TABLE articles (
  2.     id INT AUTO_INCREMENT PRIMARY KEY,
  3.     title VARCHAR(255) NOT NULL,
  4.     content TEXT,
  5.     url VARCHAR(255) UNIQUE,
  6.     published_date DATETIME
  7. );
复制代码
这个表用于存储文章的标题、内容、URL和发布日期。
3. 利用Python毗连数据库

利用Python的数据库驱动程序毗连到数据库。对于MySQL,可以利用mysql-connector-python或pymysql。
安装MySQL驱动
  1. pip install mysql-connector-python
复制代码
示例代码
  1. import mysql.connector
  2. config = {
  3.     'user': 'your_username',
  4.     'password': 'your_password',
  5.     'host': 'localhost',
  6.     'database': 'your_database',
  7.     'raise_on_warnings': True
  8. }
  9. cnx = mysql.connector.connect(**config)
  10. cursor = cnx.cursor()
复制代码
4. 插入数据到数据库

将爬取的数据插入到数据库中。可以利用参数化查询来防止SQL注入攻击。
示例代码
  1. insert_query = "INSERT INTO articles (title, content, url, published_date) VALUES (%s, %s, %s, %s)"
  2. data = ("Article Title", "Article content", "http://example.com/article", "2021-07-26 14:30:00")
  3. cursor.execute(insert_query, data)
  4. cnx.commit()
复制代码
5. 处置惩罚大量数据

当处置惩罚大量数据时,应该批量插入数据以提高效率。
示例代码
  1. articles_data = [
  2.     ("Title1", "Content1", "http://example.com/1", "2021-07-26 14:30:00"),
  3.     ("Title2", "Content2", "http://example.com/2", "2021-07-26 15:00:00"),
  4.     # 更多文章数据...
  5. ]
  6. cursor.executemany(insert_query, articles_data)
  7. cnx.commit()
复制代码
6. 更新和删除数据

除了插入数据,有时还需要更新或删除数据库中的数据。
示例代码
  1. update_query = "UPDATE articles SET content = %s WHERE id = %s"
  2. cursor.execute(update_query, ("Updated content", 1))
  3. cnx.commit()
  4. delete_query = "DELETE FROM articles WHERE id = %s"
  5. cursor.execute(delete_query, (1,))
  6. cnx.commit()
复制代码
7. 利用ORM工具

为了简化数据库操作,可以利用ORM(对象关系映射)工具,如SQLAlchemy。
安装SQLAlchemy
  1. pip install SQLAlchemy
复制代码
示例代码
  1. from sqlalchemy import create_engine, Column, Integer, String, Text, DateTime
  2. from sqlalchemy.ext.declarative import declarative_base
  3. from sqlalchemy.orm import sessionmaker
  4. import datetime
  5. Base = declarative_base()
  6. class Article(Base):
  7.     __tablename__ = 'articles'
  8.     id = Column(Integer, primary_key=True)
  9.     title = Column(String(255), nullable=False)
  10.     content = Column(Text)
  11.     url = Column(String(255), unique=True)
  12.     published_date = Column(DateTime)
  13. engine = create_engine('mysql+mysqlconnector://your_username:your_password@localhost/your_database')
  14. Session = sessionmaker(bind=engine)
  15. session = Session()
  16. # 添加新文章
  17. new_article = Article(title="New Article", content="Content", url="http://example.com/new", published_date=datetime.datetime.now())
  18. session.add(new_article)
  19. session.commit()
  20. # 查询文章
  21. article = session.query(Article).filter_by(id=1).first()
  22. print(article.title)
复制代码
8. 错误处置惩罚和日志记载

在与数据库交互时,应该妥善处置惩罚可能出现的错误,并记载须要的日志。
示例代码
  1. try:
  2.     cursor.execute(insert_query, data)
  3.     cnx.commit()
  4. except mysql.connector.Error as err:
  5.     print("Something went wrong: {}".format(err))
  6.     cnx.rollback()
  7. finally:
  8.     cursor.close()
  9.     cnx.close()
复制代码
9. 非关系型数据库存储

对于非结构化数据,可以选择非关系型数据库,如MongoDB。
安装MongoDB驱动
  1. pip install pymongo
复制代码
示例代码
  1. from pymongo import MongoClient
  2. client = MongoClient('localhost', 27017)
  3. db = client['your_database']
  4. collection = db['articles']
  5. # 插入文档
  6. article = {"title": "Article Title", "content": "Article content", "url": "http://example.com/article", "published_date": "2021-07-26 14:30:00"}
  7. collection.insert_one(article)
  8. # 查询文档
  9. result = collection.find_one({"title": "Article Title"})
  10. print(result['content'])
复制代码
10. 综合示例

下面是一个综合示例,展示了如何从网页爬取数据并保存到MySQL数据库中。
示例代码
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import mysql.connector
  4. # 爬取网页数据
  5. url = 'http://example.com/articles'
  6. response = requests.get(url)
  7. soup = BeautifulSoup(response.text, 'html.parser')
  8. # 解析文章数据
  9. articles = []
  10. for article_tag in soup.find_all('article'):
  11.     title = article_tag.find('h2').text
  12.     content = article_tag.find('p').text
  13.     url = article_tag.find('a')['href']
  14.     published_date = article_tag.find('time')['datetime']
  15.     articles.append((title, content, url, published_date))
  16. # 连接数据库并保存数据
  17. config = {
  18.     'user': 'your_username',
  19.     'password': 'your_password',
  20.     'host': 'localhost',
  21.     'database': 'your_database',
  22.     'raise_on_warnings': True
  23. }
  24. cnx = mysql.connector.connect(**config)
  25. cursor = cnx.cursor()
  26. insert_query = "INSERT INTO articles (title, content, url, published_date) VALUES (%s, %s, %s, %s)"
  27. cursor.executemany(insert_query, articles)
  28. cnx.commit()
  29. cursor.close()
  30. cnx.close()
复制代码
这个脚本从网页爬取文章数据,并将其保存到MySQL数据库中。
结论

将爬取的数据保存到数据库中是网络爬虫开发中的一个重要环节。通过利用Python毗连数据库,并执行插入、更新和删除操作,我们可以有用地存储和管理数据。本文详细介绍了如何利用Python将数据保存到关系型数据库和非关系型数据库,并提供了丰富的代码示例,资助读者深入明白数据存储的过程。随着你对网络爬虫技能的深入,合理保存数据将使你的数据收集工作更加高效和有序。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表