Python3实现的爬虫爬取数据并存入mysql数据库操作示例

Python3实现的爬虫爬取数据并存入mysql数据库操作示例

简介

本攻略展示了如何使用Python3编写一个简单的爬虫程序,抓取网页数据并将其存入MySQL数据库中。

要完成本攻略,您需要有Python3和MySQL数据库的基本知识,并安装好相应的Python库:requests、beautifulsoup4、pymysql。

前置准备

  1. 安装Python3:请到Python官网下载最新版Python3并按照安装向导进行安装。
  2. 安装MySQL数据库:请到MySQL官网下载最新版MySQL并按照安装向导进行安装。安装好之后,请创建一个名为crawl的数据库,并在该数据库下创建一个名为news的数据表。news表的表结构如下:

CREATE TABLE `news` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`url` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

该数据表包含三个字段:id(主键)、title(新闻标题)、url(新闻链接)。

  1. 安装Python库:在命令行中分别执行以下命令:

pip install requests
pip install beautifulsoup4
pip install pymysql

爬虫程序

以下是爬虫程序的源代码:

import requests
from bs4 import BeautifulSoup
import pymysql

# 构造请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36'
}

# 爬取页面,返回页面内容
def crawl(url):
    response = requests.get(url, headers=headers)
    response.encoding = response.apparent_encoding
    return response.text

# 解析页面,返回新闻列表
def parse(html):
    soup = BeautifulSoup(html, 'html.parser')
    news_list = []
    for item in soup.select('div.news-item'):
        news = {}
        news['title'] = item.select_one('h3 a').text.strip()
        news['url'] = item.select_one('h3 a')['href']
        news_list.append(news)
    return news_list

# 将新闻列表保存到数据库中
def save(news_list):
    conn = pymysql.connect(host='localhost', user='root', password='123456', db='crawl', charset='utf8')
    try:
        with conn.cursor() as cursor:
            for news in news_list:
                sql = 'INSERT INTO news (title, url) VALUES (%s, %s)'
                cursor.execute(sql, (news['title'], news['url']))
            conn.commit()
    finally:
        conn.close()

# 爬取网页,解析新闻列表,保存到数据库中
def main():
    url = 'https://www.baidu.com/s?wd=news'
    html = crawl(url)
    news_list = parse(html)
    save(news_list)

if __name__ == '__main__':
    main()

示例说明

以下是两个关于如何抓取新的网页内容更新到数据库的代码示例:

代码示例一:抓取时间戳之后更新数据库

import time

# 将新闻列表保存到数据库中
def save(news_list):
    conn = pymysql.connect(host='localhost', user='root', password='123456', db='crawl', charset='utf8')
    try:
        with conn.cursor() as cursor:
            # 先查询数据库中的最新记录的时间戳
            cursor.execute('SELECT MAX(add_time) FROM news')
            last_add_time = cursor.fetchone()[0]
            # 如果没有记录,则将时间戳设为0
            if not last_add_time:
                last_add_time = 0
            # 遍历新闻列表,将新增的新闻插入数据库中
            for news in news_list:
                add_time = int(time.time())
                if add_time > last_add_time:
                    sql = 'INSERT INTO news (title, url, add_time) VALUES (%s, %s, %s)'
                    cursor.execute(sql, (news['title'], news['url'], add_time))
                    conn.commit()
    finally:
        conn.close()

代码示例二:判断新闻链接是否已在数据库中存在

# 将新闻列表保存到数据库中
def save(news_list):
    conn = pymysql.connect(host='localhost', user='root', password='123456', db='crawl', charset='utf8')
    try:
        with conn.cursor() as cursor:
            # 遍历新闻列表,判断每个新闻链接是否已存在于数据库中
            for news in news_list:
                sql = 'SELECT COUNT(*) FROM news WHERE url=%s'
                cursor.execute(sql, news['url'])
                count = cursor.fetchone()[0]
                # 如果新闻链接不存在于数据库中,则插入该新闻
                if count == 0:
                    sql = 'INSERT INTO news (title, url) VALUES (%s, %s)'
                    cursor.execute(sql, (news['title'], news['url']))
                    conn.commit()
    finally:
        conn.close()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3实现的爬虫爬取数据并存入mysql数据库操作示例 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python中创建二维数组

    在Python中,可以使用列表来创建二维数组。二维数组是由多个一维数组组成的数据结构,可以用于存储和处理二维数据。本文将详细讲解如何创建和操作二维数组。 创建二维数组 在Python中,可以使用列表来创建二维数组。二维数组是由多个一维数组组成的数据结构,可以用于存储和处理二维数据。下面是一个示例: # 创建一个3×3的二维数组 my_array = [[0,…

    python 2023年5月13日
    00
  • 用python制作个论文下载器(图形化界面)

    制作论文下载器的完整攻略可以分为以下几个步骤: 步骤一:确定需求 在开始制作之前,我们需要确定自己的需求,考虑自己要做一个什么样的论文下载器。这个下载器需要具备哪些功能,需要考虑用户体验如何。 步骤二:安装依赖包 在制作下载器前,我们需要安装一些Python的依赖包,可以使用以下指令安装: pip install requests beautifulsoup…

    python 2023年6月13日
    00
  • Python smtplib 向对应行中的收件人发送电子邮件

    【问题标题】:Python smtplib send email to recipient in correspondant rowPython smtplib 向对应行中的收件人发送电子邮件 【发布时间】:2023-04-07 18:16:01 【问题描述】: 有没有办法使用 python smtplib 发送邮件,其收件人在数据框中的行不同? (一对一邮…

    Python开发 2023年4月8日
    00
  • python数据结构之图的实现方法

    以下是关于“Python数据结构之图的实现方法”的完整攻略: 简介 图是一种常用的数据结构,用于表示对象之间的关系。在本教程中,我们将介绍如何使用Python实现图,包括邻接矩阵和邻接表两种实现方法。 邻接矩阵 邻接矩阵是一种常用的图的实现方法,它使用二维数组表示图中的节点和边。在邻接矩阵中,每个节点都对应数组中的一行和一列,如果两个节点之间有边相连,则在对…

    python 2023年5月14日
    00
  • Python 安装setuptools和pip工具操作方法(必看)

    Python安装setuptools和pip工具操作方法 Python是一种高级编程语言,常用于Web开发、数据分析、人工智能等领域。但在使用Python时,我们常常需要安装一些第三方库来实现更复杂的功能。而setuptools和pip就是用来管理Python第三方库的工具。 安装setuptools setuptools是管理Python包的一个工具,它提…

    python 2023年5月14日
    00
  • pytest多线程与多设备并发appium

    下面是关于“pytest多线程与多设备并发appium”的完整攻略。 1. 准备工作 在开始之前,我们需要准备以下工作: 安装appium:npm install -g appium 安装pytest、pytest-xdist、pytest-html等依赖包: python pip install pytest pytest-xdist pytest-htm…

    python 2023年5月19日
    00
  • 详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

    详解Python结合Genetic Algorithm算法破解网易易盾拼图验证 简介 网易易盾拼图验证码是一种常见的人机验证方式,其通过将原图拆分成小拼图,用户需要将拼图正确还原后才能通过验证。本文将介绍如何使用Python结合遗传算法(Genetic Algorithm)破解网易易盾拼图验证。 思路 考虑到网易易盾拼图验证码有多种随机拆分方式,且每次验证的…

    python 2023年5月18日
    00
  • python实现机器人卡牌

    下面详细讲解一下“Python实现机器人卡牌”的完整攻略。 确定项目的目标和步骤 首先,我们需要明确项目的目标和步骤。机器人卡牌的实现可以分为以下步骤: 定义卡牌的属性和方法 初始化卡牌库,并随机抽取一定数量卡牌 设计游戏机制并实现其逻辑 实现机器人的自动操作 设计游戏界面并实现其交互 定义卡牌的属性和方法 在这一步中,我们需要定义每一张卡牌的属性和方法。具…

    python 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部