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爬虫requests库多种用法实例

    以下是关于Python爬虫requests库多种用法实例的攻略: Python爬虫requests库多种用法实例 requests是Python中一个流行的HTTP库,可以用于向Web服务器发送HTTP请求和接收响应。以下是Python爬虫requests库多种用法实例: 发送GET请求 以下是使用requests发送GET请求的示例: import req…

    python 2023年5月14日
    00
  • 实例讲解python函数式编程

    实例讲解Python函数式编程 函数式编程是一种编程范式,强调将程序看作是数学运算的执行。Python在函数式编程方面有很好的支持,在这篇文章中,我们将讲解Python函数式编程的基本概念和应用实例。 基本概念 在函数式编程中,函数被看作一等公民,即函数和普通值一样可以作为参数、返回值和变量保存。同时,函数式编程的代码通常都是不可变的,它们不能修改已经存在的…

    python 2023年5月18日
    00
  • python儿童入门教程分享 python儿童学习简单教学

    Python儿童入门教程攻略 简介 Python是一门简单易学的编程语言,特别适合儿童入门学习。本教程旨在通过分享Python的基础知识,帮助儿童了解和掌握编程,并提供一些简单有趣的项目作为实践。 学习前准备 在开始学习Python之前,需要安装Python解释器。选择Python 3.x版本进行安装。 安装完成后,可以使用Python IDLE进行Pyth…

    python 2023年5月30日
    00
  • python使用Random随机生成列表的方法实例

    Python使用Random随机生成列表的方法实例 在Python中,我们可以使用random模块来生成随机数。本攻略将详细介绍如何使用random模块来生成随列表。 生成随机整数列表 以下是一个示例代码,演示如何使用random模块生成随机整数列表: import random # 生成随机整数列表 random_list = [random.randin…

    python 2023年5月13日
    00
  • Python:从给定的数组/列表创建树结构

    【问题标题】:Python: create tree structure from given array/listPython:从给定的数组/列表创建树结构 【发布时间】:2023-04-04 23:55:01 【问题描述】: 我遇到了一个问题。 假设我有一个给定的数组,或者 4 个单独的列表(列) P1 L1 V1 O1 P1 L1 V1 O2 P1 L…

    Python开发 2023年4月6日
    00
  • Python列表推导式详解

    以下是“Python列表推导式详解”的完整攻略。 1. 什么是列表推导式 列表推导式是Python中一种简洁的语法,用于快速创建列表。它的语法形式为: [expression for item in iterable if condition] 其中,expression是一个表达式,item是可迭代对象中的元素,iterable是一个可迭代对象,condi…

    python 2023年5月13日
    00
  • python字符串查找函数的用法详解

    Python字符串查找函数的用法详解 在Python中,字符串查找是进行文本处理的常用操作。字符串查找函数可以用于查找文本中的子字符串、判断子字符串是否存在、替换文本中的字符串等操作。本篇文章将详细讲解Python字符串查找函数的用法。 Python中常见的字符串查找函数 Python中常见的字符串查找函数包括: find(sub):查找字符串中是否包含子字…

    python 2023年6月5日
    00
  • Python运维之获取系统CPU信息的实现方法

    下面是详细讲解Python运维中如何获取系统CPU信息的实现方法的完整攻略。 获取系统CPU信息的实现方法 在Python中获取系统CPU信息可以通过psutil模块实现。psutil是一个跨平台库,可以用来获取计算机系统的信息,包括CPU、内存、磁盘、网络等信息,同时还可以对进程进行管理。 下面我们通过两个示例来演示如何使用psutil获取系统CPU信息。…

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