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

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

时间:2024-07-14 20:58:35浏览次数:15  
标签:quotes Python self py scrapy 爬取 item 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程序、爬取的数据保存到数据库、本地文件的操作。


标签:quotes,Python,self,py,scrapy,爬取,item,Scrapy
From: https://blog.csdn.net/roc_wei_chen/article/details/140375008

相关文章

  • Python监控服务器状态程序
    前言最近服务器有几次被安全狗断网,没找到好的解决方法。就先写了个Python程序监控网络状态,断网5分钟强制重启服务器的脚步。代码importpsutilimportsocketimporttimeimportosimportdatetimedefcheck_internet_connection():try:socket.creat......
  • 【Playwright+Python】手把手带你写一个自动化测试脚本
     如何使用代理方式打开网页 在playwright.chromium.launch()中传入proxy参数即可,示例代码如下:1、同步写法:fromplaywright.sync_apiimportsync_playwrightproxy={'server':'http:/127.0.0.1:8080'}defrun():withsync_playwright()asp:......
  • Python爬虫教程第二篇:进阶技巧与实战案例
    Python爬虫教程第二篇:进阶技巧与实战案例在上一篇教程中,我们学习了Python爬虫的基础概念、基本流程以及一个简单的入门实践案例。本篇教程将带领大家进一步探索Python爬虫的进阶技巧,并提供一个实战案例,帮助大家提升爬虫技能。一、进阶技巧处理JavaScript渲染的页面在We......
  • 教你创建Python函数信手拈来哦(递归函数)
    Python中函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段函数能提高应用的模块性,和代码的重复利用率Python提供了许多内建函数,比如print()、type()、类型转换函数等等用户也可以自己创建函数,这被叫做用户自定义函数一、定义函数1.创建函数函数使用def关键......
  • python中缺失值处理——在因子选股中的应用
    ​在因子选股当中,如果直接对整个数据库进行操作,对于股价历史数据,经常出现由于股票退市等造成的缺失值,但是在回测时,如果只用有值的股票,会由于维度不匹配而报错。因此,经常需要把整张数据表中的非空数据取出,进行处理,再填回因子矩阵中。由于基本上每次都会用到,所以本人专门写......
  • python 66 个冷知识 0714
    66个有趣的Python冷知识生成随机浮点数random.uniform(a,b)生成区间[a,b]之间的随机浮点数。反向枚举使用reversed()和enumerate()可以反向枚举列表。单元测试装饰器unittest提供了@unittest.skip装饰器用于跳过测试。动态类型Python是动态类型语言......
  • python 基础10 requests
    requests官方文档:https://requests.readthedocs.io/projects/cn/zh-cn/latest/快速上手https://requests.readthedocs.io/projects/cn/zh-cn/latest/user/quickstart.html安装找到目标路径Scriptspipinstallrequests-ihttps://pipy.douban.com/simple发送请求简洁:im......
  • python-关于返回值return
    一.含义        "return"是编程语言中的一个关键字,通常用于函数或方法的结尾,表示将执行结果返回给调用者。        通俗讲就是一个事物反馈给你的东西。就像你一拍桌子,会返回声音和力的反作用力。二.作用1.负责函数返回值,返回一个参数或数据等。2.退出当......
  • 使用 Python 处理 Lumerical 导出的 .txt 文件(完结)
    使用Python处理Lumerical导出的.txt文件引言正文以,隔开的波长与透射率以\t隔开的波长与透射率引言之前在添加链接描述一文中我们已经介绍了如何将Lumerical仿真中的S参数相关数据导出为.txt文件。这里我们来分享如何使用Python对这些......
  • 用python生成词频云图(python实例二十一)
    目录1.认识Python2.环境与工具2.1python环境2.2VisualStudioCode编译3.词频云图3.1代码构思3.2代码实例3.3运行结果4.总结1.认识PythonPython是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读性,相比其他语......