爬虫进阶:Scrapy入门

进阶前言

  学Py和写爬虫都有很长一段时间了,虽然工作方面主要还是做Java开发,但事实上用python写东西真的很爽。之前都是用Requests+BeautifulSoup这样的第三方库爬一些简单的网站,好处简单上手快,坏处也明显,单线程速度慢,偶尔想要跑快点还得自己写多线程或者多进程。其实早已久仰Scrpay大名,无奈一直没有主动去接触,前不久买了一本相关的书籍,看完之后便陆陆续续试手了几个实战项目(后续介绍),现在应该算是半梦半醒迈入半个大门了。其实Java也有好几个不错的爬虫框架,那为什么不选择Java?呵呵,人生苦短,用Python没错,何况它现在这么火。

  大多数学习是没有捷径的,如果你也想学Scrapy,根据个人经验,可以先买一两本相关书籍翻翻,然后写写小项目,接着再继续往深入学习,网上有很多不错的关于Scrapy的电子书,文末会推荐一波自己瞎逛已收藏的,可以根据自己的实际情况进行帅选和甄别。

目录结构

  万事开头难,安装好Scrapy环境后输入命令scrapy startproject start,这样就创建好了第一个scrapy项目,目录结构如下:

- start
    - start 
        - spiders # 爬虫编写及存放的目录
            - __init__.py
        - __init__.py
        - items.py # 定义爬虫数据结构的类
        - middlewares.py # 定义一些中间件的类,包括代理、请求头这些
        - pipelines.py # 数据流出的管道类,将爬取数据保存入库等
        - settings.py # 配置相关类,包括像日志、middlewares和pipelines等
    - scrapy.cfg # 主要用于将爬虫部署到第三方,一般可不理会

  项目框架已经搭起来了,紧接着示例下如何第一个爬虫,可以自己在spiders目录下手动创建爬虫类,也可以用scrapy提供的快捷命令scrapy genspider {spider-name} {target-website}快速生成指定名称的目标站点爬虫(参考如下)。例如spider-name可以定义为example,target-website指定为example.com

# -*- coding: utf-8 -*-
import scrapy


class ExampleSpider(scrapy.Spider):
    name = 'example'  # 爬虫名称,运行的时候需指定
    allowed_domains = ['example.com']  # 允许爬取的域名
    start_urls = ['http://example.com/']  # 第一个爬取的目标网址

    def parse(self, response):
        """scrapy爬取完首个目标网页后会回调到这个方法"""

        pass

  更多优秀和详细的Scrapy入门知识应该从书中或者其它学习资源获取,最后再附上Scrapy学习必备的经典架构图:

Scrapy经典架构图

常见命令

  这里记录和列举一些常用的scrapy命令及其作用:

命令

作用

可选参数

scrapy startproject {project-name}

创建scrapy项目

scrapy genspider {spider-name} {target-domain}

创建目标站点指定名称爬虫

scrapy shell {url}

调试抓取的指定网页

-s USER_AGENT='xxx',加上指定请求头

scrapy crawl {spider-name}

运行指定爬虫

-o output.{json or xml or cvs},将抓取结果输出为指定格式文件保存; -s {CLOSESPIDER_PAGECOUNT or CLOSESPIDER_ITEMCOUNT}=n,抓取指定数量网页或ITEM后自动停止爬虫

scrapy check {spider-name}

检测爬虫是否存在错误

学习资源

参考链接

scrapy命令行工具 Scrapy Documentation Scrapy 中文文档 示例代码 - GitHub

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenssy

【追光者系列】HikariCP连接池监控指标实战

该指标持续飙高,说明DB连接池中基本已无空闲连接。 拿之前业务方应用pisces不可用的例子来说(如下图所示),当时所有线程都在排队等待,该指标已达172,此时...

1964
来自专栏Python绿色通道

Python爬虫学前普及

恩,准备进入正题了!最近一段时间没有怎么更新公众号,主要就是在做爬虫教程的一些准备工作,看看爬虫需要用到那些技术,然后做个计划出来,确定一下学习课程中缝,这不今...

1032
来自专栏MixLab科技+设计实验室

就叫Spyfari吧!|数据爬取及可视化系列

这是《数据爬取及可视化系列》的第四篇文章。 前3篇文章,可以查阅: 01基于位置的用户画像初探 02技能之谷歌Chrome爬虫 03 使用Echarts制作可视...

2854
来自专栏desperate633

Python爬虫之爬取中国大学排名(BeautifulSoup库)分析

首先,我们确定需要爬取的网页 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html

671
来自专栏服务端技术杂谈

快的打车架构实践

1.客户端与服务端通信会遇到哪些问题? 2.怎样基于Storm和HBase打造实时监控平台? 3.怎样对Web系统进行分布式改造? 快的打车从2013年年底到2...

3594
来自专栏小怪聊职场

爬虫课程(六)|Scrapy安装以及目录结构介绍

2914
来自专栏思考的代码世界

Python网络数据采集之开始采集|第02天

网络爬虫是可以根据递归方式。为了找到URL 链接,它们必须首先获取网页内容,检查这个页面的内容,再寻找另一个 URL,然后获取 URL对应的网页内容,不断循环这...

4448
来自专栏华章科技

如何用 Python 打造一个聊天机器人?

不知道玩Slack的人多不多?国内有一个类似的产品,之前搞PythonTG翻译组在用,但是没怎么用起来。感觉这些产品提供的灵活性还蛮大的,可以自己实现许多有意思...

1075
来自专栏Python中文社区

一个抓取豆瓣图书的开源爬虫的详细步骤

简介 基于numpy和bs4的豆瓣图书爬虫,可以分类爬取豆瓣读书300多万本图书信息,包括标题、作者、定价、页数、出版信息等 github地址:https://...

6589
来自专栏Crossin的编程教室

Python 实战(5):拿来主义

有了列表,有了详细信息,有了搜索,这个电影网站已经有了基本的结构。现在要做的是:获取更多的内容。 我们没有必要也不可能自己去生产数量庞大的电影信息,互联网上的资...

2716

扫码关注云+社区

领取腾讯云代金券