Scrapy 爬虫的基本使用

1 Scrapy爬虫的第一个实例

  • 产生步骤(1)
    应用 Scrapy 爬虫框架主要是编写配置型代码
    步骤1∶建立一个 Scrapy 爬虫工程
    选取一个目录(D:\pycodes),然后执行如下命令∶

以 firstdemo 项目的文件目录为例:

  • 产生步骤(2)
    步骤2∶在工程中产生一个 Scrapy 爬虫
    进入工程目录(D:\pycodes\python123demo),然后执行如下命令∶

该命令作用︰
(1) 生成一个名称为 demo 的 spider
(2) 在 spiders 目录下增加代码文件 demo.py
该命令仅用于生成 demo.py,该文件也可以手工生成

  • 产生步骤(3)
    步骤3∶配置产生的 spider 爬虫
    配置∶(1) 初始URL地址 (2) 获取页面后的解析方式
# -*- coding: ut-8-*-
# 简化版
import scrapy
class DemoSpider(scrapy.Spider):
    name = "demo" # 爬虫文件的名称:就是爬虫源文件的—个唯一标识
    # allowed_domains = ["python123.io"] 允许的域名:用来限定start_urls列表中哪些url可以进行请求发送
    start_uris = ['http:i/python123.io/ws/demo.htm1'] # 起始的url列表:该列表中存放的url会被scrapy自动进行请求的发送
    # 用作于数据解析:response参数表示的就是请求成功后对应的响应对象
    def parse(self, response):
        fname = response.url.split('/')[-1]  # 以爬取到的内容命名
        with open(fname, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)

# 完整版
import scrapy
class Demospider(scrapy.Spider):
    name = "demo"
    def start_requests(self):
        urls = ['http:/lpython123.io/ws /demo .html']
        for url in urls:
            yield scrapy.Request(url=ur1, callback=self.parse)

    def parse(self, response):
        fname = response.url.split('/ ')[-1]
        with open(fname, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)
  • 产生步骤(4)
    步骤4∶运行爬虫,获取网页
    在命令行下,执行如下命令∶

demo 爬虫被执行,捕获页面存储在 demo.html

2 yield 关键字的使用

[带有 yield 的函数在 Python 中被称之为 generator (生成器)]
生成器每调用一次在 yield 位置产生一个值,直到函数执行结束
生成器相比一次列出所有内容的优势:
a) 更节省存储空间 b) 响应更迅速 c) 使用更灵活

生成器的引入
如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。

在 Python 中,这种一边循环一边计算的机制,称为生成器(generator)。
1) 要创建一个 generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的 [] 改成 (),就创建了一个 generator

怎么打印出 generator 的每一个元素呢?
想要一个一个打印出来,可以通过 next() 函数获得 generator 的下一个返回值:

generator 保存的是算法,每次调用 next(g),就计算出 g 的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出 StopIteration 的错误。

generator 也是可迭代对象,我们可以利用 for 循环遍历提取其中的元素。

2) 定义 generator 的另一种方法,yield 关键字
如果一个函数定义中包含 yield 关键字,那么这个函数就不再是一个普通函数,而是一个 generator

generator 和函数的执行流程不一样。函数是顺序执行,遇到 return 语句或者最后一行函数语句就返回。而变成 generator 的函数,在每次调用 next() 的时候执行,遇到 yield 语句返回,再次执行时从上次返回的 yield 语句处继续执行。

可以看到,odd 不是普通函数,而是 generator,在执行过程中,遇到 yield 就中断,return 出要生成的数,下次又继续执行。

3 Scrapy 爬虫的基本使用

Scrapy 爬虫的数据类型




CSS Selector 的基本使用:

CSS Selector (CSS选择器)由 W3C 组织维护并规范

4 Scrapy 拓展

由于执行项目会默认打印日志,对于我们要查看的显示信息进行干扰,我们可以选择不打印日志。

--> scrapy crawl first --nolog

但这种方式会不打印所有日志,代码出现错误时不会显示结果,也不会有错误提示。因此,可以考虑只打印错误日志,其余日志不打印。

修改配置后,只会打印错误日志,无错误时不打印日志

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • @[toc] 产生步骤1 应用scrapy爬虫框架主要是编写配置型代码 产生步骤2 在工程中产生一个scrapy爬...
    Cache_wood阅读 267评论 0 1
  • Scrapy是什么? Scrapy是一个由Python编写的开源协作爬虫框架,可以快速的从网站中提取需要的数据。S...
    枫铃阅读 513评论 0 0
  • Scrapy框架 什么是scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需...
    樱井咲夜阅读 389评论 0 0
  • Python版本管理:pyenv和pyenv-virtualenvScrapy爬虫入门教程一 安装和基本使用Scr...
    inke阅读 62,729评论 12 130
  • Scrapy框架 什么是scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需...
    鲸随浪起阅读 10,220评论 1 16