scrapy简单入门

简介: scrapy简单入门

1. 前言

  1. 爬取数据用的 比 request功能强大多了

2.  安装

  • 根据自己的环境选择安装哪个
  1. pip install scrapy
  2. pip list 查看依赖列表
  • 权限问题可以install 后面加上 --user
  1. conda install scrapy
  2. conda list 查看依赖列表
  • 指令
  1. scrapy -v 查看版本
  2. 终端输入 scrapy 会有相关的指令提示

3.  创建项目

  1. scrapy startproject 项目名称
  2. 其实也会有相关的指令提示
  3. cd  项目名称
  4. 大体的目录结构 image.png
    scrapy1.png

4. 创建爬虫

  1. scrapy genspider 爬虫名称 网站域名
  2. 比如上图中的 novel 就是爬虫名称

5.  目录分析

  1. scrapy.cfg Scrapy项目的配置文件,其中包含项目的全局配置信息和设置
  2. scrrpy/目录 存放代码
  3. init.py:一个空文件,用于将该目录标记为Python的包目录
  4. items 定义用于存储抓取到的数据的数据模型
    定义自己的Item类,用于保存抓取到的数据字段
  5. middlewares.py:中间件文件,包含Scrapy的中间件组件。
    中间件用于对请求和响应进行预处理或后处理的过程
  6. pipelines.py:管道文件,包含Scrapy的管道组件。
    管道用于对抓取到的数据进行处理和持久化,例如存储到数据库或文件中)
  7. settings.py:Scrapy项目的配置文件,包含各种配置选项和参数,如请求头、下载延迟、管道设置等
  8. spiders/:存放爬虫文件的目录。爬虫文件是定义抓取逻辑的核心部分。
  9. init.py:一个空文件,将spiders/目录标记为Python的包目录。

6. 常用的指令

  • 运行爬虫
  1. scrapy crawl 爬虫名称
    爬虫的名字是 蜘蛛文件夹下 文件的 名字
  2. 如果文件的名字 文件内 name 不一样,
  3. 那肯定是取 name对应的值才是 爬虫名
    image.png

    爬虫名.png

  • 输出指定的文件
  1. 默认可以输出  csv json  xml 格式的文件
  2. scrapy crawl novel -o noevl.csv
  • -- nolog
  1. 简洁日志输出
  2. scrapy crawl novel -o noevl.csv --nolog

7. demo

items定义爬取字段

  1. items.py

import scrapy
class NovelItem(scrapy.Item):
    # define the fields for your item here like:
    chapter = scrapy.Field()
    url = scrapy.Field()

novel 书写具体的爬虫路径

  1. spider/novel.py

import scrapy
from scrapy import Selector
from s01.items import NovelItem
class NovelSpider(scrapy.Spider):
    name = "novel"
    allowed_domains = ["www.xxx.com"]
    start_urls = ["https://www.xxx.com/book/xiyouji"]
    #
    def parse(self, response):
        # print('response', response)
        sel = Selector(response)
        li_list = sel.css('div.book-mulu > ul > li')
        # print('li_list', li_list)
        # 伪装
        for li_itm in li_list:
            novel = NovelItem()
            novel['chapter'] = li_itm.css("a::text").extract_first()
            novel['url'] = li_itm.css("a::attr(href)").extract_first()
            # print('novel', novel)
            yield novel

settings.py配置

  1. 18行 左右 伪装客户端

USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'

运行

  1. scrapy crawl novel -o noevl.csv --nolog
  2. 其实就可以直接输出 成对应的文件了

8. 管道/流 piplines

  1. 因为直接输出有时候有些问题 而且输出文件格式有限
  2. 所以可以单独写管道进行输出

比如也可以手写输出 Josn

class JsonPipeline:
    def __init__(self):
       self.data = []
       self.fp = open("./练习.json","w",encoding="utf-8")
    # 钩子函数 拿到数据 就会走
    def process_item(self, item, spider):
        # 具体数据
        url = item.get('url','')
        chapter = item.get('chapter','')
        self.data.append((chapter,url))
        if len(self.data) > 50:
            # self.fp.write(self.data)
            json.dump(self.data,self.fp, ensure_ascii=False)
            self.data.clear()
        # print('process_item-----json-----',item)
        return item
    def close_spider(self,spider):
        if len(self.data) > 0:
            # print('data--------- w--2',self.data)
            json.dump(self.data,self.fp, ensure_ascii=False)
        self.fp.close()
        print('关闭--json练习 🕷  ')

输出  excel/xlsx

  1. 当然写入 excel/xlsx的方式非常多 自由选择

class ExcelPipeline:
    def __init__(self):
        #  工作库 注意大小写
        self.wb = openpyxl.Workbook()
        # 工作表 work sheet 有很多个
        self.ws = self.wb.active
        self.ws.title = '西游记'
        self.ws.append(('章节', '地址'))
        print('init------------')
    # 拿到数据就会走的钩子
    def process_item(self, item, spider):
        chapter = item.get('chapter', "默认值")
        url = item.get('url') or ""
        self.ws.append(  (chapter, url)  )
        print('拿到数据', item)
        return item
    def open_spider(self, spider):
        print('打开🕷-----')
    def close_spider(self, spider):
        self.wb.save('西游记.xlsx')
        print('关闭爬虫')

输出 数据库


         

9.





10.





10. 后记

  1. middleware中间件 可以配置 cookie等内容 伪装登录

参考资料


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉
相关文章
|
4天前
|
数据采集 存储 机器人
Scrapy网络爬虫框架——从入门到实践
网络爬虫已经成为了信息获取的必备工具之一,而Scrapy作为Python中最流行的网络爬虫框架之一,具有高效、可扩展、易用等特点。本文将深入介绍Scrapy框架的概念和实践,帮助读者快速掌握构建高质量网络爬虫的方法。
92 0
|
4天前
|
数据采集 存储 调度
Scrapy:从入门到实践的网络爬虫框架
Scrapy是一款强大的Python网络爬虫框架,可以帮助开发者更高效地抓取互联网上的数据。本文将介绍Scrapy的概念和基本原理,详细讲解如何使用Scrapy框架实现一个简单的网络爬虫,并分享一些实战经验和技巧。
|
数据采集 存储 Ubuntu
Python:Scrapy的安装和入门案例
Python:Scrapy的安装和入门案例
139 0
Python:Scrapy的安装和入门案例
|
数据采集 Java Python
爬虫进阶:Scrapy入门
进阶前言   学Py和写爬虫都有很长一段时间了,虽然工作方面主要还是做Java开发,但事实上用python写东西真的很爽。之前都是用Requests+BeautifulSoup这样的第三方库爬一些简单的网站,好处简单上手快,坏处也明显,单线程速度慢,偶尔想要跑快点还得自己写多线程或者多进程。
1876 0
|
数据采集 NoSQL 数据库
分布式爬虫scrapy+redis入门
利用分布式爬虫scrapy+redis爬取伯乐在线网站,网站网址:http://blog.jobbole.com/all-posts/ 后文中详情写了整个工程的流程,即时是新手按照指导走也能使程序成功运行。
1634 0
|
SQL 数据采集 Web App开发
爬虫入门之Scrapy框架实战(新浪百科豆瓣)(十二)
一 新浪新闻爬取 1 爬取新浪新闻(全站爬取) 项目搭建与开启 scrapy startproject sina cd sina scrapy genspider mysina http://roll.
|
数据采集 调度 Python
爬虫入门之Scrapy框架基础LinkExtractors(十一)
1 parse()方法的工作机制: 1. 因为使用的yield,而不是return。parse函数将会被当做一个生成器使用。
|
数据采集 存储 前端开发
爬虫入门之Scrapy框架基础框架结构及腾讯爬取(十)
Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据。
|
存储 数据采集 调度
爬虫入门之Scrapy 框架基础功能(九)
Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。
|
JavaScript Docker Python
Scrapy爬虫(8)scrapy-splash的入门
scrapy-splash的介绍   在前面的博客中,我们已经见识到了Scrapy的强大之处。但是,Scrapy也有其不足之处,即Scrapy没有JS engine, 因此它无法爬取JavaScript生成的动态网页,只能爬取静态网页,而在现代的网络世界中,大部分网页都会采用JavaScript来丰富网页的功能。
2541 0