美文网首页
scrapy简单入门

scrapy简单入门

作者: 云高风轻 | 来源:发表于2023-06-04 21:22 被阅读0次

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. 大体的目录结构 scrapy1.png

4. 创建爬虫

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

5. 目录分析

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

6. 常用的指令

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


    爬虫名.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等内容 伪装登录

参考资料


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉

相关文章

网友评论

      本文标题:scrapy简单入门

      本文链接:https://www.haomeiwen.com/subject/kitiedtx.html