菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第1张图片
1、本文章介绍Scrapy爬虫框架

有的朋友可能知道,写网络爬虫的挑战之一就是你经常需要不断地重复做一些简单任务:而这些任务通常是找出页面上的所有链接、区分内链与外链、跳转到新的页面等,掌握这些基本模式非常有用。

关于Scrapy的更多介绍可参考中文网站
https://scrapy-chs.readthedocs.io/zh_CN/0.24/index.html

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第2张图片

值得一提的是Scrapy爬虫框架,Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。此外,Scrapy 就是一个帮你大幅度降低网页链接查找和识别工作复杂度的 Python 库,它可以让你轻松地采集一个或多个域名的信息。

2、Python 3.7.4安装Scrapy

安装scrapy之前需要做以下的一些准备:
本文的操作是在win系统下进行~~

(1).安装wheel

首先,cmd(或win+r)命令下切换到Scripts文件夹下
这是我的(你的自行打开Python解释器文件夹下找到就行)

其次,输入cd C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32\Scripts

最后,输入pip install wheel,出现下面的界面即为安装成功。

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第3张图片

如果在上述安装过程中出现下面的错误提示

那就需要下载whl文件,下载网站是
http://www.lfd.uci.edu/~gohlke/pythonlibs/

打开以后找到符合自己的whl文件,我选择的是

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第4张图片

然后将下载好的whl文件拖拽到Scripts文件夹下重复上述安装命令操作就可以了。

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第5张图片
(2).安装lxml

类似(1)(这里就不截图了)输入命令pip install lxml

如果还是出错就进入网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
cp37对应py3.7,自行选择32 or 64位。
安装时,运行cmd,输入pip install + 文件路径 即可

(3).安装Twisted:输入命令pip install Twisted

看到关键词Successfully 即为安装成功。
如果不成功,同(2)进入网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
安装注意事项同上

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第6张图片
(4).安装Pywin32:pip install Pywin32

进入网站,找到对应的python版本:
https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第7张图片
(5).cmd中安装Scrapy

在cmd中输入pip install scrapy,安装成功后输入scrapy测试

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第8张图片

再次检测安装情况,出现下面提示说明已经全部安装完成。

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第9张图片
3、Scrapy框架的五大基本构成

学习使用 Scrapy 之前,我们需要先来了解一下 Scrapy 框架以及它的组件之间的交互,下面这个图展现的就是 Scrapy 的框架,包括组件以及在系统中发生的数据流。(数据流就是绿色的线,描述各个组件之间是如何通信的)

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第10张图片

Scrapy框架主要由五大组件组成,它们分别是调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面我们分别介绍各个组件的作用。

(1)、crapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

(2)、Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

(3)、Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

(4)、Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

(5)、Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

(6)、Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

(7)、Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)。图表如下:

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第11张图片
4、Scrapy请求发出去的整个流程

Scrapy运行时,请求发出去的整个流程大概如下:

1.首先爬虫将需要发送请求的url(requests)经引擎交给调度器;

2.排序处理后,经ScrapyEngine,DownloaderMiddlewares(有User_Agent, Proxy代理)交给Downloader;

3.Downloader向互联网发送请求,并接收下载响应.将响应经ScrapyEngine,可选交给Spiders;

4.Spiders处理response,提取数据并将数据经ScrapyEngine交给ItemPipeline保存;

5.提取url重新经ScrapyEngine交给Scheduler进行下一个循环。直到无Url请求程序停止结束。

5、Scrapy抓取一个网站的步骤及项目的创建

使用 Scrapy抓取一个网站一共分为四个步骤:
a–创建一个Scrapy项目;
b–定义Item容器;
c–编写爬虫;
d–存储内容。

下面以创建一个项目为例子
a、第一步要做的就是运行命令行,Scrapy 是命令行的,在爬取之前,我们要先创建一个 Scrapy 项目,我们来到桌面,运行 scrapy startproject myscrapy1,回车之后,在桌面就出现了 tutorial 文件夹。

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第12张图片

打开这个文件夹就是按照下面的形式存储的:

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第13张图片

备注:scrapy.cfg 是项目的配置文件(暂时不用,保持默认即可)
myscrapy1子文件夹 存放的是模块的代码,也是我们要填充的代码
items.py 是项目中的容器.

b、步骤二:定义 Item 容器~未完待续

每日三道题, 笔试面试不吃亏:

题目16:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

程序分析:利用 while 或 for 语句,条件为输入的字符不为 '\n'。

使用 while 循环

import string
s = input('请输入一个字符串:\n')
letters = 0
space = 0
digit = 0
others = 0
i=0
while i < len(s):
    c = s[i]
    i += 1
    if c.isalpha():
        letters += 1
    elif c.isspace():
        space += 1
    elif c.isdigit():
        digit += 1
    else:
        others += 1
print ('char = %d,space = %d,digit = %d,others = %d' % (letters,space,digit,others))

运行结果:

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第14张图片

使用 for 循环

import string
s = input('请输入一个字符串:\n')
letters = 0
space = 0
digit = 0
others = 0
for c in s:
    if c.isalpha():
        letters += 1
    elif c.isspace():
        space += 1
    elif c.isdigit():
        digit += 1
    else:
        others += 1
print ('char = %d,space = %d,digit = %d,others = %d' % (letters,space,digit,others))

题目17:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

程序分析:关键是计算出每一项的值。

a=input('输入数字>>>')
count=int(input('几个数字相加>>>'))
ret=[]
for i in range(1,count+1):
    ret.append(int(a*i))
    print(ret[i-1])
print(sum(ret))

运行结果:

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第15张图片

题目18:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

from sys import stdout
for j in range(2,1001):
    k = []
    n = -1
    s = j
    for i in range(1,j):
            if j % i == 0:
                n += 1
                s -= i
                k.append(i)
    
    if s == 0:
        print (j)
        for i in range(n):
            stdout.write(str(k[i]))
            stdout.write(' ')
        print ("完数为:",k[n])

运行结果:

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第16张图片

扫码关注我,一起交流学习

菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一)_第17张图片
image

你可能感兴趣的:(菜鸟学习Python(第十一期)~~Scrapy爬虫框架(一))