爬虫学习之基于 Scrapy 的爬虫自动登录

概述

在前面两篇(爬虫学习之基于Scrapy的网络爬虫爬虫学习之简单的网络爬虫)文章中我们通过两个实际的案例,采用不同的方式进行了内容提取。我们对网络爬虫有了一个比较初级的认识,只要发起请求获取响应的网页内容,然后对内容进行格式化存储。很多时候我们抓取到的内容可能会发生重复,也有可能是需要计算或者组织过的全新的内容甚至是需要登录后才能访问的内容, 那么这一篇我们来学习一下Scrapy的Item部分以及了解如何使用Scrapy来进行自动登录。

起步

首先我们使用Scrapy的命令行创建一个新的项目

运行后,我们就有了下面这样的目录结构

Scrapy为我们生成了已经组织好的目录结构,上面的注释部分解释了每个文件及目录的作用。

建立目标

本篇我们来建立两个目标,这两个目标都是基于豆瓣网

  • 目标一:抓取豆瓣TOP250的图书信息并保存成csv文件
  • 目标二:抓取我的第一页豆邮标题(需要登录),并保存成csv文件

分析目标一

目标一是豆瓣的TOP250图书信息,首先我们进入到TOP250的列表(https://book.douban.com/top250) ,我用图示圈出我们这次要爬取的内容,具体请看图示:

从图上的框线中我们主要圈出了书名、价格、出版年份、出版社、评分,其中出版年份,出版社以及价格是在一行中,这个我们需要进一步处理。

分页的处理:总记录是250条,每页是25条图书信息,共分了10页。

实现目标一

需要用到的概念:

  • Item
  • Item Pipeline

首先建立Scrapy的Item, Scrapy的Item就是我们需要存储的数据结构,先修改items, 然后在spiders目录中新建一个名为bookspider.py的Python文件,由于我们需要在一堆字符串中提取出出版社和价格等信息所以我们这里需要对抓取的内容进一步处理, 在这之前还需要修改settings.py文件:

  1. 加入faker的模拟USER_AGENT数据防止被豆瓣屏蔽,
  2. 也可以设置DEFAULT_REQUEST_HEADERS参数。
  3. 修改ITEM_PIPELINES

代码如下所示:

items.py

bookspider.py

pipelines.py

最后我们到douban的根目录中执行以下命令来运行爬虫来执行并导出数据到csv文件

csv文件截图如下:

分析目标二

目标二是建立在理解了目标一的基础上进行的,因为豆瓣登录次数过多会有验证码出现,这里提供一种手工填写验证码的方式,暂时不讨论如何去识别验证码,目标二的核心概念是如何提交POST表单和登录成功后带Cookie的请求。首先我们可以看到页面结构如下图所示:

实现目标二

定义Item

定义doumailspider

这里需要注意的有三个地方:

  1. 第一个是meta中的cookiejar
    Scrapy 通过使用 cookiejar Request meta key来支持单spider追踪多cookie session。默认情况下其使用一个cookie jar(session),不过您可以传递一个标示符来使用多个。
  2. start_requests 我们这里重写了爬虫爬取得第一个页面,这里一开始就进去到登录页面
  3. 当执行爬虫的时候,我们需要把打印出来的验证码地址粘贴到浏览器中,手动输入到控制上完成验证。

同目标一一样需要设置settings中的相关参数,唯一不同的是ITEM_PIPELINES。

最后我们使用以下命令来启动爬虫

csv文件截图如下:

Github地址:https://github.com/imchenkun/ick-spider/tree/master/douban

总结

本篇我们学习了如果定义Item以及如何对Item进行进一步处理(Item Pipeline), 还通过登录豆瓣的案例来了解了如果使用Scrapy进行表单提交和Cookie追踪,也了解了对于有验证码的情况该如何处理,当然我们这里暂时还不讨论如何识别验证码。关于Scrapy的更高级的一些用法和特性可以进一步阅读Scrapy官网的文档。

特别申明:本文所提到的豆瓣网只是拿来进行爬虫的技术交流学习,读者涉及到的所有侵权问题都与本人无关,也希望大家在学习实战的过程中不要大量的爬取内容对服务器造成负担

1 6 收藏 3 评论

相关文章

可能感兴趣的话题



直接登录
最新评论
  • Jackeriss   2016/07/29

    呵呵,豆瓣上的内容每天要被多少爬虫爬。。。

  • taboo   03/19

    extract()后面为什么要加[0]   我试了一下,不加会有重复,但是区别在哪儿,一下午了没看懂,

跳到底部
返回顶部