Python公开课 - pyspider基本使用

1. 前言

在上一章中我们对pyspider的架构和设计方法进行了介绍,接下来我们来看看如何使用

2. 安装pyspider

pyspider目前是GitHub上的开源项目,地址为:https://github.com/binux/pyspider

我们可以通过pip来进行安装

sudo pip3 install pyspider

3. 启动pyspider

在命令行界面输入以下命令:

pyspider all

运行效果如图所示:

成功运行后,即可在默认的5000端口查看pyspider的Web UI界面

该页面便是pyspider的WebUI,我们可以用它来管理项目、编写代码、 在线调试、 监控任务等。

4. 创建项目

新建一个项目,点击右边的 Create按钮,在弹出的浮窗里输入项目的名称和爬取的链接,再点击 Create 按钮,这样就成功创建了一个项目

注意:项目名不能是中文哦,会报错

这里我们以抓取网易新闻为例

5. 编辑项目

接下来会看到 pyspider 的项目编辑和调试页面

左侧就是代码的调试页面,点击左侧右上角的 run按钮可以单步调试爬虫程序,在左侧下半部分可以预览当前的爬取页面。 右侧是代码编辑页面,我们可以直接编辑代码和保存代码。

右侧的代码就是核心代码了,我们可以在此处定义爬取、 解析、存储的逻辑。 整个 爬虫的功能只需要一个Handler即可完成。

自动生成的代码如下:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2019-03-14 16:27:26
# Project: 163

from pyspider.libs.base_handler import *


class Handler(BaseHandler):
    crawl_config = {
    }

    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl('https://news.163.com', callback=self.index_page)

    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc('a[href^="http"]').items():
            self.crawl(each.attr.href, callback=self.detail_page)

    @config(priority=2)
    def detail_page(self, response):
        return {
            "url": response.url,
            "title": response.doc('title').text(),
        }

代码详解:

  • crawl_config - 将本项目的所有爬取配置统一定义到这 里,如定义 Headers、设置代理等,配置之后全局生效。
  • on_start() - 是爬取入口,初始的爬取请求会在这里产生。
  • index_page() - 接收这个抓取结果的Response 参数。
  • detail_page() - 同样接收Response 作为参数。detail_page()抓取的就是详情页的信息,就不会生成新的请求,只对 Response对象做解析,解析之后将结果以字典的形式返回。

6. 抓取索引页

点击左栏右上角的run按钮,即可看到页面下方follows便会出现一个标注,其中包含数字 l ,这代表有新的爬取请求产生。

点击下方的follows按钮,即可看到生成的爬取请求的链接。

点击链接右侧的箭头按钮,即可进行页面的抓取。

上方的 callback 已经变成了 index_page,这就代表当前运行了index_page()方法,这里未做链接过滤,所以把页面的链接都提取了出来。我们可以在index_page()中编写逻辑来处理。可以借助工具来实现,切换到web界面,然后点击下方的enable css selector helper。

在右侧代码选中要更改的区域,点击左栏的有箭头,此时在上方出现的标题的 css 选择器就会被替换到左侧代码,这样就成功完成了 css 选择器的替换,非常便捷。

重新点击左栏有上角的 run 按钮, 即可重新执行index_page()方法。 经过过滤后,效果如下:

7. 抓取详情页

任意选取一个详情页进入,点击箭头,执行详情页的爬取。但是没有看到内容,这个是由于该页面的产生是由JS生成的,我们需要将fetch_type改为js即可

进行选取想要的内容,即可完成

效果如下:

左栏中输出了最终构造的字典信息, 这就是一篇新闻的抓取结果。

8. 启动爬虫

返回爬虫的主页面,将爬虫的 status 设置成 DEBUG 或 RUNNING,点击右侧的 Run 按钮即可开始爬取。

9. 相关阅读


相关推荐
  1. 易中天给英雄武汉的一首诗 - 武汉新鲜事
  2. Vim - 基础教程
  3. 成都市站东小学
  4. 南京市渊声巷小学
  5. Python公开课 - Django配置多源数据库
  6. 武汉动物园火烈鸟孔雀排队打疫苗
  7. Python公开课 - 数据抓取之Selenium使用(下)
  8. 荣成市第二十九中学
  9. 长沙市靳江小学
  10. 童心艺术幼儿园 - 石家庄幼儿园黄页
  11. 央媒聚焦!国庆假期173.78万人次打卡大美黄陂
  12. 天津市武清区南蔡村中学
  13. 生存的拐杖
  14. 快刀斩乱麻
  15. 武汉一女子七天被骗220万
  16. 东莞市东城中心小学
  17. 佛山市四中
  18. 河马先生钓鱼
  19. 长春市第一实验中海小学(长春实验一小中海小学)
  20. 通过选择实现梦想
  21. 枫叶双语幼儿园 - 哈尔滨幼儿园黄页
  22. 法官,看护和隐居者
  23. 上海市青浦区赵屯中心小学
  24. 榆林市横山县横山育人幼儿园 - 榆林市幼儿园黄页
  25. 珍珠鸡和鳄鱼
  26. 太原市迎泽区小红伞幼儿园 - 太原幼儿园黄页
  27. TCP报头格式的是什么?
  28. 舟山市田家炳中学
  29. 沈阳市第九十二中学
  30. 上海市宝山区博爱双语艺术幼儿园(绥化路分校) - 上海幼儿园黄页
  31. 脱单!武汉的相亲角在哪你知道吗?
  32. 福州延安中学
  33. 车队管理及解决方案 - 附SkyBitz & Omnitracs成立车队管理合作伙伴
  34. 湖北将发放消费券 - 武汉新鲜事
  35. 武汉女子网上做兼职被骗六十五万
  36. 沙河口区华北路小学
  37. 咪咪捉鼠
  38. 复齿鼯鼠:会飞的鼠
  39. 奥迪客户不满加价,被武汉4S店销售群殴
  40. 桂林市七星区蒙特梭利幼儿园 - 桂林幼儿园黄页
  41. Python源码剖析 - Python的总体架构
  42. 青岛开发区致远中学
  43. 警方通报:武汉男子持刀至五死一伤,嫌犯已跳桥
  44. 江阴市辅延中心小学
  45. 武汉00后大二学妹拍视频月入七十万
  46. 纸醉金迷
  47. 武汉市汉阳区菁华艺术幼儿园 - 武汉幼儿园黄页
  48. 广州增城市星海中英文幼儿园 - 广州幼儿园黄页
  49. Python公开课 - Python中的保留关键字
  50. 众泰造车的沉浮
  51. 新生儿擦钒会疼吗 - 育儿经验
  52. Ubuntu 编译 libsodium 以支持 chacha20 加密方式
  53. 松溪郑墩中学
  54. 鸡鸭之罪
  55. 滕州市柴胡店镇中心中学
  56. 沈阳市东陵区前进街道中心小学
  57. 河北省唐山市龙华幼儿园 - 唐山幼儿园黄页
  58. 吴江市第二高级中学
  59. 车企数字化转型(下)
  60. 长沙市金鹰小学