首页 > 其他分享 >scrapy:CrawlSpider及其案例

scrapy:CrawlSpider及其案例

时间:2023-05-25 17:44:46浏览次数:40  
标签:name settings CrawlSpider self spider 案例 item scrapy

1. CrawSpider介绍

image-20230525163921435

运行原理:

image-20230525163958211

2. pymysql

image-20230525164128794

conda install pymysql

3. 案例-读书网爬虫&数据入库

3.1 案例需求

image-20230525164215111


3.2 网页分析

image-20230525163831180

image-20230525165834118

3.3 创建爬虫项目

image-20230525163213223

3.4 创建爬虫文件(与之前有区别)

scrapy genspider -t crawl read https://www.dushu.com/book/1188.html

image-20230525164750225

3.5 实现爬虫

image-20230525170807520

image-20230525170821604

image-20230525170831402

image-20230525170848927

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

from scrapy_readbook_6.items import ScrapyReadbook6Item


class ReadSpider(CrawlSpider):
    name = "read"
    allowed_domains = ["www.dushu.com"]
    start_urls = ["https://www.dushu.com/book/1188_1.html"]  # 注意要_1,不然就不符合Rule,导致取不到第一页

    rules = (Rule(
        LinkExtractor(allow=r"/book/1188_\d+\.html"),  # 正则;需要修改allowed_domains为域名范围
        callback="parse_item",
        follow=False
    ),)

    def parse_item(self, response):
        # 爬取图片和书名
        img_list = response.xpath('//div[@class="bookslist"]//img')
        for img in img_list:
            name = img.xpath('./@data-original').extract_first()
            src = img.xpath('./@alt').extract_first()
            book = ScrapyReadbook6Item(name=name, src=src)
            yield book

scrapy crawl read

image-20230525171105788

3.6 实现入库

image-20230525173142041

image-20230525173225262

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter


class ScrapyReadbook6Pipeline:
    def open_spider(self, spider):
        self.fp = open('book.json', 'w', encoding='utf-8')

    def process_item(self, item, spider):
        self.fp.write(str(item))
        return item

    def close_spider(self, spider):
        self.fp.close()


from scrapy.utils.project import get_project_settings  # 加载settings文件
import pymysql
class MysqlPipeline:
    def open_spider(self, spider):
        settings = get_project_settings()
        self.host = settings['DB_HOST']
        self.port =settings['DB_PORT']
        self.user =settings['DB_USER']
        self.password =settings['DB_PASSWROD']
        self.name =settings['DB_NAME']
        self.charset =settings['DB_CHARSET']
        self.connect()

    def connect(self):
        self.conn = pymysql.connect(
                            host=self.host,
                            port=self.port,
                            user=self.user,
                            password=self.password,
                            db=self.name,
                            charset=self.charset
        )
        self.cursor = self.conn.cursor()

    def process_item(self, item, spider):
        sql = 'insert into book(name,src) values("{}","{}")'.format(item['name'], item['src'])
        # 执行sql语句
        self.cursor.execute(sql)
        # 提交
        self.conn.commit()
        return item

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

scrapy crawl read

image-20230525173308650

image-20230525173415234

标签:name,settings,CrawlSpider,self,spider,案例,item,scrapy
From: https://www.cnblogs.com/yppah/p/17432394.html

相关文章

  • scrapy:电影天堂案例
    嵌套数据封装成一个item(一个item包含多级页面的数据):每条记录的名称+点进去之后第二页中的图片1.创建爬虫项目scrapystartprojectscrapy_movie_52.创建爬虫文件scrapygenspidermvhttps://www.ygdy8.net/html/gndy/china/index.html3.实现爬虫importsc......
  • 多行业标杆企业财务共享案例解析
    随着信息技术的快速发展,由于创新商业模式的出现,金融结构、操作策略和流程正在发生变化。大数据、云计算、人工智能、机器人流程自动化(RPA)等新兴技术正在应用于金融及财务领域,以优化财务管理流程并提高运营效率。财务共享作为一种系统的管理方案,将组织、流程、系统、人员包括思想进......
  • scrapy:快速入门
    1.安装2.项目创建与运行3.项目组织架构4.工作原理5.案例-百度首页创建爬虫的项目【scrapystartproject项目的名字】注意:项目的名字不允许使用数字开头也不能包含中文创建爬虫文件要在spiders文件夹中去创建爬虫文件【cd项目的名字\项目的名字\sp......
  • scrapy:scrapy shell
    ......
  • 案例3 测试小工具平台
    案例3测试小工具平台需求假如你们公司Web平台,在测试过程中总有一些高频的操作,需要通过数据库操作、或者多个步骤组合(比较麻烦)来操作,如构造订单、发放优惠券、权限审批等。你针对这些需求开发了不同的自动化流程脚本,需要一个界面提供给团队使用。提示需要的能力HTML基础,......
  • 案例丨构建智慧感知网,宏电助力城市内涝“智”理
    在城市化进程不断推进和极端降雨事件频发的双重影响下,“城市看海”现象频繁发生,借助云计算、大数据、物联网等新技术,大力发展适应时代的智慧防洪排涝设施体系是预防城市内涝发生的重要科技手段。 为做好城市防汛排涝工作,四川省广元经济技术开发区辖区实施了城市防排涝综合监管平台......
  • 数据代码分享|R语言回归分析:体脂数据、公交绿色出行与全球变暖2案例
    全文链接:http://tecdat.cn/?p=32520原文出处:拓端数据部落公众号通常在现实应用中,我们需要去理解一个变量是如何被一些其他变量所决定的。回答这样的问题,需要我们去建立一个模型。一个模型就是一个公式之中,一个因变量(dependentvariable)(需要预测的值)会随着一个或多个数值型的......
  • 【愚公系列】2023年05月 .NET CORE工具案例-C#调用Python的二种方式
    (文章目录)前言.NET调用Python的作用和意义是可以利用Python强大的数据处理和机器学习能力,结合.NET的优势进行开发,提高开发效率和应用性能。同时,Python也可以通过.NET进行调用,实现跨语言的开发和应用。一、C#调用Python的三种方式1.ironPython调用1.1ironPython的安装IronP......
  • GPT应用案例:AI机械佛祖-人工智能佛祖始终与您相伴-对接企业微信客服
    最近唯一客服有一个特殊的客户,是东华禅寺,想要实现企业微信客服对接GPT机器人自动回答信众问题实现的效果如图所示实现上面的案例非常简单,只需要在唯一客服系统中注册账号,然后对接企业微信客服。这样客服系统就与企业微信对接成功了,联系管理员开通AI功能,添加上自己的提示词,就能......
  • RocketMQ 在小米的多场景灾备实践案例
    作者:邓志文、王帆01为什么要容灾?在小米内部,我们使用RocketMQ来为各种在线业务提供消息队列服务,比如商城订单、短信通知甚至用来收集IoT设备的上报数据,可以说RocketMQ的可用性就是这些在线服务的生命线。作为软件开发者,我们通常希望服务可以按照理想状态去运行:在没有Bug的......