前言
本文是自己在学习了一段时间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,可能是由于没有人维护的缘故,该网站的测评系统似乎用不了了,但是该答案和网上其他博主爬取出来的数据一致,说明本次爬虫过程还是很成功的。