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等内容 伪装登录

参考资料


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉
相关文章
|
1月前
|
数据采集 监控 中间件
Scrapy入门到放弃03:理解settings配置,监控scrapy引擎|8月更文挑战
Scrapy入门到放弃03:理解settings配置,监控scrapy引擎|8月更文挑战
|
3月前
|
数据采集 存储 JSON
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非常流行的选择。本篇文章将详细介绍这两个库,并提供一个综合详细的例子,展示如何使用它们来进行网页数据爬取。
|
6月前
|
数据采集 存储 JSON
从入门到精通:掌握Scrapy框架的关键技巧
从入门到精通:掌握Scrapy框架的关键技巧
|
5月前
|
数据采集 中间件 数据处理
scrapy的入门和使用
scrapy的入门和使用
|
6月前
|
数据采集 存储 调度
Scrapy:从入门到实践的网络爬虫框架
Scrapy是一款强大的Python网络爬虫框架,可以帮助开发者更高效地抓取互联网上的数据。本文将介绍Scrapy的概念和基本原理,详细讲解如何使用Scrapy框架实现一个简单的网络爬虫,并分享一些实战经验和技巧。
|
6月前
|
数据采集 存储 机器人
Scrapy网络爬虫框架——从入门到实践
网络爬虫已经成为了信息获取的必备工具之一,而Scrapy作为Python中最流行的网络爬虫框架之一,具有高效、可扩展、易用等特点。本文将深入介绍Scrapy框架的概念和实践,帮助读者快速掌握构建高质量网络爬虫的方法。
305 0
|
数据采集 存储 Ubuntu
Python:Scrapy的安装和入门案例
Python:Scrapy的安装和入门案例
164 0
Python:Scrapy的安装和入门案例
|
数据采集 NoSQL 数据库
分布式爬虫scrapy+redis入门
利用分布式爬虫scrapy+redis爬取伯乐在线网站,网站网址:http://blog.jobbole.com/all-posts/ 后文中详情写了整个工程的流程,即时是新手按照指导走也能使程序成功运行。
1671 0
|
数据采集 Java Python
爬虫进阶:Scrapy入门
进阶前言   学Py和写爬虫都有很长一段时间了,虽然工作方面主要还是做Java开发,但事实上用python写东西真的很爽。之前都是用Requests+BeautifulSoup这样的第三方库爬一些简单的网站,好处简单上手快,坏处也明显,单线程速度慢,偶尔想要跑快点还得自己写多线程或者多进程。
1908 0
|
SQL 数据采集 Web App开发
爬虫入门之Scrapy框架实战(新浪百科豆瓣)(十二)
一 新浪新闻爬取 1 爬取新浪新闻(全站爬取) 项目搭建与开启 scrapy startproject sina cd sina scrapy genspider mysina http://roll.