利用爬虫的scrapy框架对网页中的数字进行求和

前言

本文是自己在学习了一段时间scrapy框架后,进行的一个简单的项目过程,该过程虽然简单,但意在让自己熟悉一下完整利用scrapy框架要执行哪些步骤,此外这是本人第一篇博客,有不好的地方还请指正。

一、创建项目:

在cmd终端执行以下命令

scrapy startproject num1

系统反馈如下:

New Scrapy project 'num1', using template directory 'C:\Users\IMAC\AppData\Local\Programs\Python\Python39-32\lib\site-packages\scrapy\templates\project', created in:
    C:\python\num1

You can start your first spider with:   
    cd num1
    scrapy genspider example example.com

说明此时项目已经创建成功了,我们此时还可以利用tree命令查看一下生成文件的结构,需要注意的是在Windows环境下tree命令只能展示文件夹而不能展示文件,要展示所有文件需要使用tree /F这个命令。

C:\python>tree /F num1
卷 BOOTCAMP 的文件夹 PATH 列表
卷序列号为 0000009A 7AEB:D0EB
C:\PYTHON\NUM1
│  scrapy.cfg
│
└─num1
    │  items.py
    │  middlewares.py
    │  pipelines.py
    │  settings.py
    │  __init__.py
    │
    └─spiders
            __init__.py
二、创建爬虫:

首先利用cd命令进入项目文件,再在终端输入以下命令创建爬虫项目:

scrapy genspider sum glidedsky.com

输入命令后,系统反馈为:

C:\python\num1>scrapy genspider sum glidedsky.com
Created spider 'sum' using template 'basic' in module:
  num1.spiders.sum

再通过tree当前文件,与前面的文件结构进行一个对比:

C:\python\num1>tree /F num1
卷 BOOTCAMP 的文件夹 PATH 列表
卷序列号为 000000F9 7AEB:D0EB
C:\PYTHON\NUM1\NUM1
│  items.py
│  middlewares.py
│  pipelines.py
│  settings.py
│  __init__.py
│
├─spiders
│  │  sum.py
│  │  __init__.py
│  │
│  └─__pycache__
│          __init__.cpython-39.pyc
│
└─__pycache__
        settings.cpython-39.pyc
        __init__.cpython-39.pyc

此时发现spider文件夹的目录下多出来了一个sum.py的文件,该文件就是我们进行爬虫过程编辑的文件。
此时sum.py内的内容如下:

import scrapy


class SumSpider(scrapy.Spider):
    name = 'sum'
    allowed_domains = ['glidedsky.com']
    start_urls = ['http://glidedsky.com/']

    def parse(self, response):
        pass
三、进行爬虫编辑

先将start_urls内的内容改为我们的待爬取的网址,然后在parse函数里进行爬虫的编辑。
最终的sum.py文件的内容如下:

import scrapy


class SumSpider(scrapy.Spider):
    name = 'sum'
    allowed_domains = ['glidedsky.com']
    start_urls = ['http://www.glidedsky.com/level/web/crawler-basic-1']

    #因为访问的网站需要登录,所以要先重写start_requests函数
    def start_requests(self):
        url = self.start_urls[0]

        temp = '' #temp中保存的是cookies的值,因为该值涉及登录的隐私,故不再这里写出,自己运行时可以将自己登录网站时的cookies值复制粘贴到这里
        cookies = {
    
    data.split('=')[0]: data.split('=')[-1]for data in temp.split(';')}  #将cookies转化为字典

        yield scrapy.Request(
            url=url,
            callback=self.parse,
            cookies=cookies
        )

    def parse(self, response):
        #获得所有有数字的节点
        node_list = response.xpath('//*[@id="app"]/main/div[1]/div/div/div/div')#.extract_first.strip()
        #在获取所有数字节点时,不需要.extract_first.strip(),开始时因为使用了导致无法将网页中的数字正常爬取下来。
        #先定义一个存放和值的变量sum
        sum=0

        #遍历node_list中的每个节点
        for node in node_list:

            #定义一个字典temp
            temp = {
    
    }

            #字典中'numbers'的值为遍历到的节点的值
            temp['numbers'] = node.xpath('./text()').extract_first().strip()

            #由于得到的数字为字符类型的变量,所以要通过强制类型转化为整形再相加
            sum+=int(temp['numbers'])

        #输出最后的和值
        print(sum)   

最后程序的输出结果为:

C:\python\num1>scrapy crawl sum --nolog
247509

说明该网页中所有的数字的和为247509,可能是由于没有人维护的缘故,该网站的测评系统似乎用不了了,但是该答案和网上其他博主爬取出来的数据一致,说明本次爬虫过程还是很成功的。

猜你喜欢

转载自blog.csdn.net/m0_69407893/article/details/128717883