在当今信息爆炸的期间,网络爬虫已经成为获取和处置惩罚数据的重要工具。将爬取的数据保存到数据库中,不仅可以有用地组织和存储数据,还可以为后续的数据分析和处置惩罚提供便利。本文将详细介绍如何将爬取的数据保存到数据库中,包罗关系型数据库和非关系型数据库的保存方法,并通过Python代码示例展示详细的实现步骤。
1. 选择合适的数据库
起首,根据数据的结构和利用需求选择合适的数据库。关系型数据库(如MySQL、PostgreSQL)适合结构化数据,非关系型数据库(如MongoDB)适合半结构化或非结构化数据。
2. 设计数据库模型
在保存数据之前,需要设计合适的数据库模型。这包罗确定命据表的结构、字段类型和索引等。
示例代码(MySQL):
- CREATE TABLE articles (
- id INT AUTO_INCREMENT PRIMARY KEY,
- title VARCHAR(255) NOT NULL,
- content TEXT,
- url VARCHAR(255) UNIQUE,
- published_date DATETIME
- );
复制代码 这个表用于存储文章的标题、内容、URL和发布日期。
3. 利用Python毗连数据库
利用Python的数据库驱动程序毗连到数据库。对于MySQL,可以利用mysql-connector-python或pymysql。
安装MySQL驱动:
- pip install mysql-connector-python
复制代码 示例代码:
- import mysql.connector
- config = {
- 'user': 'your_username',
- 'password': 'your_password',
- 'host': 'localhost',
- 'database': 'your_database',
- 'raise_on_warnings': True
- }
- cnx = mysql.connector.connect(**config)
- cursor = cnx.cursor()
复制代码 4. 插入数据到数据库
将爬取的数据插入到数据库中。可以利用参数化查询来防止SQL注入攻击。
示例代码:
- insert_query = "INSERT INTO articles (title, content, url, published_date) VALUES (%s, %s, %s, %s)"
- data = ("Article Title", "Article content", "http://example.com/article", "2021-07-26 14:30:00")
- cursor.execute(insert_query, data)
- cnx.commit()
复制代码 5. 处置惩罚大量数据
当处置惩罚大量数据时,应该批量插入数据以提高效率。
示例代码:
- articles_data = [
- ("Title1", "Content1", "http://example.com/1", "2021-07-26 14:30:00"),
- ("Title2", "Content2", "http://example.com/2", "2021-07-26 15:00:00"),
- # 更多文章数据...
- ]
- cursor.executemany(insert_query, articles_data)
- cnx.commit()
复制代码 6. 更新和删除数据
除了插入数据,有时还需要更新或删除数据库中的数据。
示例代码:
- update_query = "UPDATE articles SET content = %s WHERE id = %s"
- cursor.execute(update_query, ("Updated content", 1))
- cnx.commit()
- delete_query = "DELETE FROM articles WHERE id = %s"
- cursor.execute(delete_query, (1,))
- cnx.commit()
复制代码 7. 利用ORM工具
为了简化数据库操作,可以利用ORM(对象关系映射)工具,如SQLAlchemy。
安装SQLAlchemy:
示例代码:
- from sqlalchemy import create_engine, Column, Integer, String, Text, DateTime
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy.orm import sessionmaker
- import datetime
- Base = declarative_base()
- class Article(Base):
- __tablename__ = 'articles'
- id = Column(Integer, primary_key=True)
- title = Column(String(255), nullable=False)
- content = Column(Text)
- url = Column(String(255), unique=True)
- published_date = Column(DateTime)
- engine = create_engine('mysql+mysqlconnector://your_username:your_password@localhost/your_database')
- Session = sessionmaker(bind=engine)
- session = Session()
- # 添加新文章
- new_article = Article(title="New Article", content="Content", url="http://example.com/new", published_date=datetime.datetime.now())
- session.add(new_article)
- session.commit()
- # 查询文章
- article = session.query(Article).filter_by(id=1).first()
- print(article.title)
复制代码 8. 错误处置惩罚和日志记载
在与数据库交互时,应该妥善处置惩罚可能出现的错误,并记载须要的日志。
示例代码:
- try:
- cursor.execute(insert_query, data)
- cnx.commit()
- except mysql.connector.Error as err:
- print("Something went wrong: {}".format(err))
- cnx.rollback()
- finally:
- cursor.close()
- cnx.close()
复制代码 9. 非关系型数据库存储
对于非结构化数据,可以选择非关系型数据库,如MongoDB。
安装MongoDB驱动:
示例代码:
- from pymongo import MongoClient
- client = MongoClient('localhost', 27017)
- db = client['your_database']
- collection = db['articles']
- # 插入文档
- article = {"title": "Article Title", "content": "Article content", "url": "http://example.com/article", "published_date": "2021-07-26 14:30:00"}
- collection.insert_one(article)
- # 查询文档
- result = collection.find_one({"title": "Article Title"})
- print(result['content'])
复制代码 10. 综合示例
下面是一个综合示例,展示了如何从网页爬取数据并保存到MySQL数据库中。
示例代码:
- import requests
- from bs4 import BeautifulSoup
- import mysql.connector
- # 爬取网页数据
- url = 'http://example.com/articles'
- response = requests.get(url)
- soup = BeautifulSoup(response.text, 'html.parser')
- # 解析文章数据
- articles = []
- for article_tag in soup.find_all('article'):
- title = article_tag.find('h2').text
- content = article_tag.find('p').text
- url = article_tag.find('a')['href']
- published_date = article_tag.find('time')['datetime']
- articles.append((title, content, url, published_date))
- # 连接数据库并保存数据
- config = {
- 'user': 'your_username',
- 'password': 'your_password',
- 'host': 'localhost',
- 'database': 'your_database',
- 'raise_on_warnings': True
- }
- cnx = mysql.connector.connect(**config)
- cursor = cnx.cursor()
- insert_query = "INSERT INTO articles (title, content, url, published_date) VALUES (%s, %s, %s, %s)"
- cursor.executemany(insert_query, articles)
- cnx.commit()
- cursor.close()
- cnx.close()
复制代码 这个脚本从网页爬取文章数据,并将其保存到MySQL数据库中。
结论
将爬取的数据保存到数据库中是网络爬虫开发中的一个重要环节。通过利用Python毗连数据库,并执行插入、更新和删除操作,我们可以有用地存储和管理数据。本文详细介绍了如何利用Python将数据保存到关系型数据库和非关系型数据库,并提供了丰富的代码示例,资助读者深入明白数据存储的过程。随着你对网络爬虫技能的深入,合理保存数据将使你的数据收集工作更加高效和有序。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |