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

yizhihongxing

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将列表作为参数传入函数时的测试与理解。 列表作为参数传入函数 在Python中,可以将列表作为参数入函数中进行处理。下面是一个示例: # 示例1:将列表作为参数传入函数 def sum_list(lst): sum =0 for i in lst: sum += i ret…

    python 2023年5月13日
    00
  • Python爬虫准备——requests和bs4安装

    昨天想要写一下Python爬虫试试,但没想到导入的包并没有安装好。有两个这样的包,requests和bs4,requests是网络请求,bs4是html解析器。 那么接下来就说一下如何安装这两个包 一、用指令安装(pip install ……)   大体上来说就是,打开DOS(命令提示符),进入到你安装Python环境的目录下,找到Scripts目录并进入,…

    爬虫 2023年4月11日
    00
  • 小米5s微信跳一跳小程序python源码

    首先,解析“小米5s微信跳一跳小程序python源码”需要了解以下三个方面:微信小程序的工作原理、跳一跳小程序的游戏机制、Python程序的编写。 微信小程序与传统的应用程序不同,它是基于微信平台提供的API服务开发的。因此,在开发微信小程序时,需要使用微信公众平台开发者工具进行代码编写、调试、预览、上传等操作。 跳一跳小程序的游戏机制是,通过点击屏幕让小人…

    python 2023年5月23日
    00
  • python实现列表的排序方法分享

    Python实现列表的排序方法分享 在Python中,我们可以使用内置的sort()函数和sorted()函数来对列表进行排序。本攻略将介绍如何使用这两个函数对列表进行排序,并提供示例代码演示。 sort()函数 sort()函数是Python内置的列表排序函数,它可以对列表进行原地排序,即直接修改原列表。sort()函数有两个可选参数:reverse和ke…

    python 2023年5月13日
    00
  • 两行Python代码实现pdf转word功能

    以下是详细讲解“两行Python代码实现pdf转word功能”的完整攻略。 1. 安装 pytesseract 和 pypdf2 模块 使用 pip 指令安装 pytesseract 和 pypdf2 模块,前者用于 OCR 图像文字识别,后者用于读取 PDF 文件内容,指令如下: pip install pytesseract pypdf2 2. 编写 P…

    python 2023年6月5日
    00
  • python操作mysql、excel、pdf的示例

    Python 作为一门强大的脚本语言,可以方便地对各种常见文件格式进行操作,比如 MySQL 数据库、Excel 表格和 PDF 文件。下面将针对这三种文件格式,提供 Python 的示例代码和详细说明。 Python 操作 MySQL 数据库 MySQL 是一种流行的关系型数据库,Python 可以方便地通过第三方库 pymysql 来实现对 MySQL …

    python 2023年5月13日
    00
  • python 命令行参数模块argparse的实现

    在Python程序中,通常从命令行传入参数并在程序中进行处理时,我们使用sys.argv来获取命令行参数。但是这种方式有一个缺点就是难以自动进行解析和提示。Python标准库中的argparse模块提供了一种自动解析命令行参数和生成帮助信息的方式,使我们的命令行工具代码更加易读、易维护和可扩展。下面是Github仓库添加标签的命令行工具中使用了argpars…

    python 2023年6月3日
    00
  • Python随手笔记之标准类型内建函数

    Python随手笔记之标准类型内建函数 Python中有许多标准类型内建函数可以对不同的数据类型进行操作。这些函数可以帮助我们更有效地处理数据,让我们来更详细地了解这些内建函数吧。 值类型转换函数 int() int()函数用于将字符串或数字转换为整型。如果参数无法转换成整数,则会抛出ValueError异常。 示例: num1 = int(‘123’) #…

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