当前位置: 首页 > backend >正文

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

 前期准备:

Scrapy入门_win10安装scrapy-CSDN博客

新建 Scrapy项目

scrapy startproject mySpider   # 项目名为mySpider

进入到spiders目录

 cd mySpider03/mySpider/spiders

创建爬虫

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

 制作爬虫

items.py:

import scrapyclass heimaItem(scrapy.Item):title = scrapy.Field()url = scrapy.Field()

heima.py:

import scrapy
from scrapy.selector import Selector
from mySpider.items import heimaItemclass 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'] = titleitem['url'] = urlyield 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 pymysqlclass 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

结果

数据库信息:

http://www.xdnf.cn/news/8044.html

相关文章:

  • SQL语句面试题
  • Ubuntu 22.04上升级Node.js版本
  • Web安全与漏洞挖掘
  • C++ inline 内联函数
  • 【PhysUnits】7 类型整数基本结构体(basic.rs)
  • 掩膜合并代码
  • 力扣算法---哈希表总结篇
  • 【无标题】Spring AI 1.0 正式发布!核心内容和智能体详解
  • upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)
  • C语言判断素数(附带源码和解析)
  • 第十三届蓝桥杯国赛PythonA题解
  • 贪心算法题目合集2
  • 链表day3
  • Linux电源管理——PSCI初始化流程和多核启动流程
  • 对于final、finally和finalize不一样的理解
  • Java基于SSM的数学辅导微信小程序【附源码、文档说明】
  • 招投标项目记录
  • 一键二次元风格转换:风格转换 ComfyUI 使用教学--
  • 逆向学习笔记1
  • 【性能提升300%】Function Calling高并发实践:gRPC优化+缓存策略+容错设计​
  • 2024正式版企业级在线客服系统源码+语音定位+快捷回复+图片视频传输+安装教程
  • id分页遍历数据漏行问题
  • 猎板PCB如何以高可靠方案护航大国重器?
  • 发布Chrome浏览器插件的几种方法
  • C++进阶--C++11
  • C++ stack对象创建、入栈、获取栈顶
  • MySQL高可用实战:PXC集群原理与部署全解析,让数据库永不宕机
  • vue页面实现table动态拆分列功能
  • 江科大TIM定时器hal库实现
  • 自定义属性面板开发指南:公开属性声明、监听回调与基础类型配置