早就想恢复每天在上写点啥的习惯,但没想到,表达欲望和写作灵感居然同时枯竭。直到今天,一个普通的周六,像往常的周末一样,本打算用来补上工作日欠下的编程课,结果被bug支配了一整天。
经历了出现bug时的意外,找不到bug时的苦恼,强迫自己从一大堆运行结果中搜索报错信息、比对标准教程找bug的烦躁,发现自己居然犯了许多低级错误的无奈……到现在,终于独立且完好地完成了今天的学习内容。
我也因此终于痛下决心,准备好好总结在学编程过程中的花式犯错。(之前一直都想,但也只是想想而已,真的太懒了……
今天是我学习python的第59天,学习内容是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个问题:我该修改哪个文件的代码
终于安装好之后,我就兴冲冲地按照教学指引敲代码了。然而,原样敲完之后,发现居然又报错了。翻了翻前几天学习群里大家的提问和助教的答疑,发现,我少修改了一个文件的代码。
想要让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和错误等待着我吧。之所以没有选择自己默默整理错误,而是把这份文档公开,也是希望能够对初学者有一点帮助。毕竟,我每次出了错不知道该怎么办的时候,也都是靠百度前辈们的学习笔记慢慢摸索出正确的方向呢。
每当遇到困难想放弃的时候,问问自己:我当时为什么选择开始?
愿不忘初心~未完待续~