python小白学习笔记:scrapy错误记录

早就想恢复每天在上写点啥的习惯,但没想到,表达欲望和写作灵感居然同时枯竭。直到今天,一个普通的周六,像往常的周末一样,本打算用来补上工作日欠下的编程课,结果被bug支配了一整天。

经历了出现bug时的意外,找不到bug时的苦恼,强迫自己从一大堆运行结果中搜索报错信息、比对标准教程找bug的烦躁,发现自己居然犯了许多低级错误的无奈……到现在,终于独立且完好地完成了今天的学习内容。

我也因此终于痛下决心,准备好好总结在学编程过程中的花式犯错。(之前一直都想,但也只是想想而已,真的太懒了……

今天是我学习python的第59天,学习内容是scrapy框架。我理解就是一组方便操作者快速搭建爬虫程序的代码库。

scrapy 框架的组成

第0个问题:scrapy 的安装

教学系统一开始就提示我,如果需要在本地电脑运行,要自行安装scrapy。可是,我按照给定的做法(在终端中输入“pip install scrapy”),却无论如何也不行,大面积爆红。根据报错信息,在网上检索了很多教程之后,终于发现了一个最稳妥的做法:

1.下载Twisted

下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

点击下载地址,进入后按  ctrl+f ,搜索twisted,然后下载对应版本:cp27表示python2.7版本、cp38表示python3.8版本;win32表示Windows32位操作系统、win_amd64表示Windows64位操作系统。

2.安装Twisted

下载完成后,进入终端,切换路径到该文件所在的文件夹下,然后输入pip install 文件名。【切换路径的方法是“cd+空格+文件夹名称”】

3.安装scrapy

安装Twisted后,再在终端输入pip install scrapy

第1个问题:我该修改哪个文件的代码

终于安装好之后,我就兴冲冲地按照教学指引敲代码了。然而,原样敲完之后,发现居然又报错了。翻了翻前几天学习群里大家的提问和助教的答疑,发现,我少修改了一个文件的代码。

图中items.py文件的代码被我漏掉了

想要让scrapy发挥作用,首先需要正确设置各个模块的参数。我把大部分的注意力都放在了核心文件中,没有注意到应该在items.py中先行定义数据。

当然,除了items.py之外,settings.py和pipelines.py在大多数情况下也是需要修改的,只不过我这次没有漏掉他们。

第2个问题:层级错误

这一部分其实不是新内容了,之前在基础部分已经接触过。但可惜那个时候掌握得就不太扎实,这两块也是让我今天不停找bug但是哪哪都找不到的核心原因。

正确答案是这样写的:

class DoubanSpider(scrapy.Spider):

    name = 'douban'

    ……(省略)……

    def parse(self, response):

        bs = BeautifulSoup(response.text,'html.parser)

        ……(省略)……

而我是这样写的:

class DoubanSpider(scrapy.Spider):

    name = 'douban'

……(省略)……

def parse(self, response):

    bs = BeautifulSoup(response.text,'html.parser)

……(省略)……

从表面看,内容是一模一样的,但是语言的层级却出了问题,导致一直报错,找了一下午的bug。

第3个问题:项目名称错误导致无法call back

由于粗心大意,在最开始建项目的时候把名字打错了(应该是douban,达成了doban)。但是后期在代码中使用的都是DoubanItem、DoubanSpider,因此导致了报错。

不过和上一个问题比,这个简直是小巫见大巫了,大概只用了10分钟就彻底解决了。没错,就是删掉重新建立项目了。

第4个问题:unkown command crawl

严格来说,我不认为这是我的问题。因为按照教程说的做(在根目录中建立main.py文档,写入并执行cmdline命令),就是会出现这个问题,即便是下载了所谓的正确答案,也会出现这个问题。但是选择另一种方法,就每次都不会错啦。

from scrapy import cmdline

import sys,os

dirpath=os.path.dirname(os.path.abspath(__file__))

# 获取当前路径

print(dirpath)

sys.path.append(dirpath)  # 将路径添加到sys.path

os.chdir(dirpath)        # 切换到当前目录

cmdline.execute(['scrapy','crawl','douban'])

# 项目不同,把douban改为你项目的

我相信,在学习编程这条路上,以后应该还会有大量的bug和错误等待着我吧。之所以没有选择自己默默整理错误,而是把这份文档公开,也是希望能够对初学者有一点帮助。毕竟,我每次出了错不知道该怎么办的时候,也都是靠百度前辈们的学习笔记慢慢摸索出正确的方向呢。

每当遇到困难想放弃的时候,问问自己:我当时为什么选择开始?

愿不忘初心~未完待续~

你可能感兴趣的:(python小白学习笔记:scrapy错误记录)