Scrapy爬取heima论坛所有页面内容并保存到MySQL数据库中

前期准备:

Scrapy入门_win10安装scrapy-CSDN博客

新建 Scrapy项目

scrapy startproject mySpider # 项目名为mySpider

进入到spiders目录

cd mySpider/mySpider/spiders

创建爬虫

scrapy genspider heima bbs.itheima.com # 爬虫名为heima ,爬取域为bbs.itheima.com

制作爬虫

items.py:

复制代码
import scrapy

class heimaItem(scrapy.Item):
    title = scrapy.Field()
    url = scrapy.Field()

heima.py

复制代码
import scrapy
from scrapy.selector import Selector
from mySpider.items import heimaItem

class HeimaSpider(scrapy.Spider):
    name = 'heima'
    allowed_domains = ['bbs.itheima.com']
    start_urls = ['http://bbs.itheima.com/forum-425-1.html']

    def parse(self, response):
        print('response.url: ', response.url)
        selector = Selector(response)
        node_list = selector.xpath("//th[@class='new forumtit'] | //th[@class='common forumtit']")
        for node in node_list:
            # 文章标题
            title = node.xpath('./a[1]/text()')[0].extract()
            # 文章链接
            url = node.xpath('./a[1]/@href')[0].extract()
            # 创建heimaItem类
            item = heimaItem()
            item['title'] = title
            item['url'] = url
            yield item
        
        # 获取下一页的链接
        if '下一页' in response.text:
            next_url = selector.xpath("//a[@class='nxt']/@href").extract()[0]
            yield scrapy.Request(next_url, callback=self.parse)

连接MySQL数据库并保存数据

首先需要在数据库中(使用workbench或者shell)创建数据库heima_db(如果不存在):

CREATE DATABASE IF NOT EXISTS heima_db;

pipelines.py:

复制代码
from itemadapter import ItemAdapter
# 需要在终端中安装pymysql包:  pip install pymysql
import pymysql

class MyspiderPipeline:
    
    def open_spider(self, spider):
        # 简单直接的MySQL连接
        self.connection = pymysql.connect(
            host='localhost',
            user='root',
            password='修改为自己的数据库密码',
            db='heima_db',
            charset='utf8mb4',
            cursorclass=pymysql.cursors.DictCursor
        )
        self.cursor = self.connection.cursor()
        
        # 创建表(如果不存在)
        self.cursor.execute("""
        CREATE TABLE IF NOT EXISTS heima_news (
            id INT AUTO_INCREMENT PRIMARY KEY,
            title VARCHAR(255),
            url VARCHAR(512),
            create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
        """)
        
        # 清空现有数据
        self.cursor.execute("TRUNCATE TABLE heima_news") # 用于快速清空heima_news表中的所有数据。
        self.connection.commit()
        print("爬虫启动,数据库已准备就绪")

    # Scrapy会自动调用 process_item() 方法处理每一个抓取到的 item。
    # 每生成一个item(例如在爬虫的 parse 方法中 yield 一个item),Scrapy就会调用一次这个方法。
    def process_item(self, item, spider):
        # 插入数据
        self.cursor.execute(
            "INSERT INTO heima_news (title, url) VALUES (%s, %s)",
            (item['title'], item['url'])
        )
        self.connection.commit()
        return item

    # 当爬虫处理完所有 start_urls 和后续发现的链接
    # 没有更多请求需要处理时,此函数会被调用
    def close_spider(self, spider):
        # 显示数据数量
        self.cursor.execute("SELECT COUNT(*) AS total FROM heima_news")
        result = self.cursor.fetchone()
        print("爬取结束,result为:", result)
        print("爬取结束,数据库中一共保存的记录数为:", result['total'])
        
        # 关闭连接
        self.cursor.close()
        self.connection.close()

settings.py,解开ITEM_PIPELINES的注释,并修改其内容:

ITEM_PIPELINES = {

"mySpider.pipelines.MyspiderPipeline": 300,

}

运行

在终端转到 mySpider/mySpider文件夹,根据你自己的路径写:

cd mySpider/mySpider

在终端中运行:

scrapy crawl heima -s LOG_ENABLED=False

结果

数据库信息:

相关推荐
那个村的李富贵1 分钟前
解锁CANN仓库核心能力:50行代码搭建国产化AIGC图片风格迁移神器
mysql·信息可视化·aigc·cann
小Tomkk1 分钟前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
qq_124987075326 分钟前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
倒流时光三十年1 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
码农小卡拉1 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
怣501 小时前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql
wjhx2 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
冰暮流星2 小时前
javascript之二重循环练习
开发语言·javascript·数据库
万岳科技系统开发2 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
冉冰学姐3 小时前
SSM智慧社区管理系统jby69(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·管理系统·智慧社区·ssm 框架