Python Scrapy爬虫、调试Scrapy程序、爬取的数据保存到数据库

前言

从0配置Scrapy爬虫程序,并记录如何调试脚本,保存数据到数据库。
这里我们以 Scrapy 推荐的官方练习项目为例进行实战演练


配置

1 初始环境

安装Anaconda,Anaconda是一个软件包管理和环境管理系统。
安装PyCharm,Python编辑器

2 创建Scrapy项目并运行

打开 Anaconda Prompt
运行以下命令
1 scrapy startproject quotes D:\PythonCode\CrawlerProject\ScrapyDemo
运行成功后得到如下项目文件

ScrapyDemo
|____ quotes
|________ spiders
|____________ __init__.py
|________ __init__.py
|________ items.py
|________ middlewares.py
|________ pipelines.py
|________ settings.py
|____ scrapy.cfg

2 切换到ScrapyDemo 目录,用下面的命令创建名为quotes的爬虫程序。

scrapy genspider quotesscrapy quotes.toscrape.com

运行完成会在spiders目录下得到quotesscrapy.py文件
在这里插入图片描述
3修改items.py文件,这里定义你抓取时数据的结构

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class QuotesItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    text = scrapy.Field()  # 每条名言的内容
    author = scrapy.Field()  # 作者
    tags = scrapy.Field()  # 标签

4 修改quotesscrapy.py文件,这里编写爬取页面的逻辑

import scrapy
from quotes.items import QuotesItem


class QuotesscrapySpider(scrapy.Spider):
    name = "quotesscrapy" # 爬虫名称
    allowed_domains = ["quotes.toscrape.com"] # 允许爬取的域名
    start_urls = ["https://quotes.toscrape.com"] # 爬虫起始url

    def parse(self, response, **kwargs):
        quotes = response.css("div.quote")
        for quote in quotes:
            item = QuotesItem()
            item["text"] = quote.css("span.text::text").extract_first("")
            item["author"] = quote.css("small.author::text").extract_first("")
            item["tags"] = quote.css("div.tags a.tag::text").extract()
            yield item

5 运行程序

scrapy crawl quotesscrapy

3 调试Scrapy项目

1 在ScrapyDemo中新建main.py文件
在这里插入图片描述
2 在这个文件中编写代码
这个代码会导入Scrapy的执行模块(execute)并引入需要的库。然后,它会将当前文件所在目录添加到Python路径中,并打印该目录。接着,它会执行Scrapy命令,启动名为quotesscrapy的爬虫,并将结果保存到名为quotesscrapy.json的JSON文件中。

from scrapy.cmdline import execute
import sys
import os

# 打断点调试py文件
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
print(os.path.dirname(os.path.abspath(__file__)))
execute(['scrapy', 'crawl', 'quotesscrapy', '-o', 'quotesscrapy.json'])

3 运行main.py进行调试成功进入断点
在这里插入图片描述

4 数据持久化

1保存到本地的json文件
上述调试时将结果保存到名为quotesscrapy.json的JSON文件中
2保存到SQLserver数据库
修改pipelines.py文件

import pymssql


class QuotesPipeline:
    def __init__(self):
        self.conn = pymssql.connect(server='your_server', user='your_username', password='your_password',
                                    database='your_database')
        self.cursor = self.conn.cursor()

    def process_item(self, item, spider):
        # 构建插入SQL语句
        insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
        self.cursor.execute(insert_query, (item['column1'], item['column2']))
        self.conn.commit()
        return item

    def close_spider(self, spider):
        self.cursor.close()
        self.conn.close()

3 修改settings.py文件打开管道。

ITEM_PIPELINES = {
   "quotes.pipelines.QuotesPipeline": 300,
}

4 运行main.py


总结

本文记录了创建Scrapy爬虫项目、调试Scrapy程序、爬取的数据保存到数据库、本地文件的操作。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值