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

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

结果

数据库信息:

相关文章:

  • 智能IoT未来与边缘生态共建 | 2025 高通边缘智能创新应用大赛第六场公开课来袭!
  • SIL2/PLd 认证 Inxpect毫米波安全雷达:3D 扫描 + 微小运动检测守护工业安全
  • 中国核电信息技术峰会|麒麟信安锻造电力“数智基座“,护航核电安全新生态
  • Java求职面经分享:Spring Boot到微服务,从理论到实践
  • Even Split_CodeForces - 1666E分析与解答
  • 使用docker compose部署dify(大模型开发使用平台)
  • 通过现代数学语言重构《道德经》核心概念体系,形成一个兼具形式化与启发性的理论框架
  • 如何在 FastAPI 中合理使用 Pydantic 的 Alias
  • Python安全密码生成器:告别弱密码的最佳实践
  • 【笔试强训day39】
  • vector
  • unittest
  • 腾讯2025年校招笔试真题手撕(一)
  • 嵌入式学习笔记 - 关于ARM编辑器compiler version 5 and compiler version 6
  • Facebook广告如何投放保健品类别?
  • 徐少春迎来AI的春天
  • Zephyr OS 中的互斥信号量
  • 网络安全-等级保护(等保) 3-1-1 GB/T 28448-2019 附录A (资料性附录)测评力度附录C(规范性附录)测评单元编号说明
  • NSSCTF-[陇剑杯 2021]webshell(问6)
  • 笔记本6GB本地可跑的图生视频项目(FramePack)
  • 台湾做甜品的网站/企业网络营销策划方案
  • 报价网站制作/培训机构
  • 什么伪原创网站好/电脑培训班一般要学多久
  • 网站关键词重要吗/网站优化招聘
  • 企业公司网站制作/上海百度推广电话客服
  • 企业做网页还是网站/关键词seo优化排名公司