一、写在前面
趁着期末周中间六天小长假(x)敲点代码。
每次体验Python便利的时候都会想到这个问题:
为什么我感觉学 Python,学到后面完全是在学别人封装好的模块?www.zhihu.com别人造好的轮子确实好用,但真学CS还是得造轮子。再联想到SICP的老师和助教们的教导,深深感受到什么叫做“学编程和学编程语言是两回事”。SICP真乃神课,借助语言带我们理解、入门这个学科,最后的那段“知难而进,贵在坚持;省察体悟,贵于改进”给我带来了极大的触动。
水平不足,暂时造不了轮子,今天来用轮子。
二、遇到的问题
Python编写爬虫的教程网上实在太多,这里就不多提了,贴上我的代码:
https://github.com/WLLEGit/Scraper_for_DouBan_Top250github.com简单的描述一下这段代码实现了什么:爬取豆瓣TOP250(仿佛所有新手爬虫都喜欢找豆瓣下手),然后保存成csv文件,期间涉及到requests库,BeautifulSoup4库和csv库的使用。
由于是分开学习然后自行编写组合的,出现了很多意料之外的问题,可能是版本或者设置差异导致的吧。
- 418响应头(418 I'm a teapot)
触发了反爬虫,需要加上一些Headers来伪装正常的浏览器,我随便用burp抓了一个:
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0"}
418错误码起源还挺有趣的:
Http错误代码418有什么典故?
2. 除了英文均为乱码
经典编码错误,但挺难找到原因的。用notepad++查看的时候改下编码就正常了,说明还是最后写入的时候编码写错了。尝试了别人的几种方法,只有把写文件的编码方式改为utf-8-sig(带签名的utf)成功了。
open("Top250.csv", "w", encoding="utf-8-sig", newline="")
3. 每两条记录间有多余空行
添加newline=""参数解决问题,原因是“在windows这种使用rn的系统里,不用newline=‘’的话,会自动在行尾多添加个r,导致多出一个空行,即行尾为rrn”
详见:https://blog.csdn.net/pfm685757/article/details/47806469
4. 制作出的表格列不是想要的顺序
采用字典方式写入csv时候遇到的问题,字典存储时是无序的,起初手册看错了没注意到DictWriter()是可以接收list作为列名的,改为有序的list作参数就可了。
三、写在后面
SICP还没考,希望人没事(x