爬虫之scrapy基础

yuyalinnb   ·   发表于 2022-11-24 17:28:56   ·   技术文章

0x01 安装和简介

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架。
原理图:


简单来说,先去spiders拿url,再转到引擎,再给其他的模块传来传去。

我自己是linux安装,windows安装很麻烦

  1. sudo apt-get install libxml2-dev libxslt-dev python-dev
  2. pip install lxml
  3. sudo apt-get install python-dev python-pip libxml2-dev zlib1g-dev libffi-dev libssl-dev
  4. pip install Scrapy
  5. apt-get install python3-scrapy

这几条都可以试试,毕竟安装这个东西很玄学。
输入scrapy后出现这个就是下载好了:

  1. └─# scrapy
  2. Scrapy 2.7.1 - no active project
  3. Usage:
  4. scrapy <command> [options] [args]
  5. Available commands:
  6. bench Run quick benchmark test
  7. commands
  8. fetch Fetch a URL using the Scrapy downloader
  9. genspider Generate new spider using pre-defined templates
  10. runspider Run a self-contained spider (without creating a project)
  11. settings Get settings values
  12. shell Interactive scraping console
  13. startproject Create new project
  14. version Print Scrapy version
  15. view Open URL in browser, as seen by Scrapy
  16. [ more ] More commands available when run from project directory
  17. Use "scrapy <command> -h" to see more info about a command

0x02 文件作用

创建项目:

  1. scrapy startproject <项目名字>

框架结构:

  1. tree <项目名字>
  2. myspider
  3. ├── __init__.py
  4. ├── items.py
  5. ├── middlewares.py
  6. ├── pipelines.py -->管道 保存数据
  7. ├── settings.py --> 设置文件 ua 启动管道
  8. └── spiders -->自定义
  9. └── __init__.py

先来看看scrapy.cfg
settings是详细设置
deploy部署 应用于项目部署


items.py 模版类,定义数据存储模型


middlewsres 中间件模块,一般不用编写。


pipelines 数据清洗或保存

0x03 创建爬虫

在项目目录下执行:

  1. cd example
  2. scrapy genspider example example.com

新的框架结构


首先继承了一个类,name是爬虫的名字,allowed_domain是允许的域名,意思是只爬取这个域名的信息,start_urs起始url是bbs.zkaq.cn。

parse方法中response是请求bbs对应的响应。
运行爬虫:

  1. scrapy crawl zkaq --nolog

—nolog:去除日志,只得到结果。
我之前有一篇爬取所有帖子名字的文章,这里直接把当时的xpath放到parse方法里。


这里用的是response的xpath方法,返回一个列表,操作和列表一样,但是有两个别的方法:

  1. extarct(): 返回一个带有字符串的列表
  2. extarct_first():返回列表的第一个字符串,没有时返回none

用上面的指令运行:


一点vim知识(我不太会linux):

  1. i 进入编辑模式
  2. ESC 退出模式
  3. :wq 保存并退出

0x04 保存数据

利用管道(pipelines)对数据进行处理和保存。

  1. 定义一个管道类
  2. 重写process_item方法
  3. process_item处理完后返回给引擎
    实际上是,spiders给引擎,引擎给pipeline

    在settings.py中,把管道注释删除,这一步叫做启动管道。


管道执行顺序:

  1. ITEM_PIPELINES = {
  2. 'myspider.pipelines.MySpiderPipeline': 299,
  3. 'myspider.pipelines.MySpiderPipeline': 300,
  4. }

则299先执行。
在zkaq.py中,使用yield把node_list返回给引擎

最后运行爬虫

用户名金币积分时间理由
Track-劲夫 20.00 0 2022-11-25 11:11:33 一个受益终生的帖子~~

打赏我,让我更有动力~

0 条回复   |  直到 2022-11-24 | 809 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.