scrapy爬虫并保存数据库

本文详细介绍了如何使用Scrapy框架进行网络爬虫开发,并将抓取的数据保存到数据库中。首先,阐述了Scrapy的结构和中间件的作用,包括下载器中间件与爬虫中间件的功能及常用方法。接着,通过一个京东爬虫实例展示了如何配置关键词、数据库以及具体抓取和解析过程。最后,给出了执行爬虫命令查看结果的步骤。

上一篇文章中简单地讲述用scrapy进行简单爬虫流程

https://blog.youkuaiyun.com/reset2021/article/details/124449231?spm=1001.2014.3001.5502

这里在上篇文章的基础上讲述怎样用scrapy实现爬虫,并且保存到数据库中。

1、scrapy框架

      scrapy框架如下图所示:

å¨è¿éæå¥å¾çæè¿°

 其中,包含两个中间件:下载器中间件(Downloader Middleware)和爬虫中间件(Spider Middleware)。使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫。

1) downloader Middleware

  • 下载器中间件是介于Scrapyrequest/response处理的钩子框架,是用于全局修改Scrapy requestresponse的一个轻量、底层的系统

  • 用于更换代理IP,更换Cookies,更换User-Agent,自动重试。

  • Scrapy其实自带了UA中间件(UserAgentMiddleware)、代理中间件(HttpProxyMiddleware)和重试中间件(RetryMiddleware

  • 从原则上说,要自己开发这3个中间件,需要先禁用Scrapy里面自带的这3个中间件。要禁用Scrapy的中间件,需要在settings.py里面将这个中间件的顺序设为None

process_request(request, spider)

RequestScrapy引擎调度给Downloader之前,process_request()方法就会被调用,也就是在Request从队列里调度出来到Downloader下载执行之前,我们都可以用process_request()方法对Request进行处理。

方法的返回值必须为NoneResponse对象、Request对象之一,或者抛出IgnoreRequest异常。

process_response(request, response, spider)

Downloader执行Request下载之后,会得到对应的ResponseScrapy引擎便会将Response发送给Spider进行解析。

在发送之前,我们都可以用process_response()方法来对Response进行处理。方法的返回值必须为Request对象、Response对象之一,或者抛出IgnoreRequest异常

</

使用Scrapy爬虫将数据保存数据库的一般步骤如下: 1. 创建一个数据库(例如MySQL)和表来存储数据。 2. 在Scrapy项目中添加数据库驱动和连接设置。 3. 在Scrapy项目中定义Item对象以保存爬取的数据。 4. 在Scrapy项目中编写Pipeline以处理Item对象,将其保存数据库中。 下面是一个简单的示例,将Scrapy爬虫数据保存到MySQL数据库中: 1. 创建数据库和表 在MySQL中创建一个名为“mydatabase”的数据库创建一个名为“mytable”的表,该表包括以下列:id、title、author和content。 ``` CREATE DATABASE mydatabase; USE mydatabase; CREATE TABLE mytable ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, author VARCHAR(255) NOT NULL, content TEXT NOT NULL ); ``` 2. 添加数据库驱动和连接设置 在Scrapy项目中的settings.py文件中添加MySQL驱动和连接设置: ``` # settings.py ITEM_PIPELINES = { 'myproject.pipelines.MySQLPipeline': 300, } MYSQL_HOST = 'localhost' MYSQL_DBNAME = 'mydatabase' MYSQL_USER = 'root' MYSQL_PASSWORD = 'mypassword' ``` 3. 定义Item对象 在Scrapy项目中的items.py文件中定义Item对象: ``` # items.py import scrapy class MyItem(scrapy.Item): title = scrapy.Field() author = scrapy.Field() content = scrapy.Field() ``` 4. 编写Pipeline 在Scrapy项目中的pipelines.py文件中编写MySQLPipeline: ``` # pipelines.py import mysql.connector class MySQLPipeline(object): def __init__(self, host, dbname, user, password): self.host = host self.dbname = dbname self.user = user self.password = password @classmethod def from_crawler(cls, crawler): return cls( host=crawler.settings.get('MYSQL_HOST'), dbname=crawler.settings.get('MYSQL_DBNAME'), user=crawler.settings.get('MYSQL_USER'), password=crawler.settings.get('MYSQL_PASSWORD') ) def open_spider(self, spider): self.connection = mysql.connector.connect( host=self.host, dbname=self.dbname, user=self.user, password=self.password ) self.cursor = self.connection.cursor() def close_spider(self, spider): self.connection.commit() self.connection.close() def process_item(self, item, spider): self.cursor.execute('INSERT INTO mytable (title, author, content) VALUES (%s, %s, %s)', (item['title'], item['author'], item['content'])) return item ``` 在这个例子中,MySQLPipeline连接到MySQL数据库将爬取的数据保存到“mytable”表中。 确保在Scrapy项目的主文件中启用MySQLPipeline: ``` # main.py from scrapy.crawler import CrawlerProcess from scrapy.utils.project import get_project_settings from myproject.spiders.myspider import MySpider process = CrawlerProcess(get_project_settings()) process.crawl(MySpider) process.start() ``` 当您运行Scrapy爬虫时,数据将被爬取保存到MySQL数据库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

reset2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值