1. str.format()的使用
也可以通过关键词来使用
使用时format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次
2. writerow()函数写入csv中时多一个空行
In Python 2.X, it was required to open the csvfile with ‘b’ because the csv module does its own line termination handling.
In Python 3.X, the csv module still does its own line termination handling, but still needs to know an encoding for Unicode strings.
由于python3中对str与byte作了严格的区分,在python3中正确的使用writerow()的方式应该是
其中在写入字符串时需要用 而不是 ,在必要的时候需要写, 在python3中需要,否则在Windows这样的系统中,会自动加上写入,导致输出文件多一个空行。
3. python中的局部变量,全局变量
在python之禅上看到个题目
输出应该是:
原因是虽然x在之前声名为全局变量,但在python中,由于在f1中修改了同名变量,所以x会被修改为局部变量,因些f2引用时就会出现错误
4. 关于书上爬虫程序的修改
《用python写网络爬虫》是基于python2的,要改用python3写还是要做不少的改变(在此为ins团队的勇气献上膝盖)
4.1. 首先是导入库的改变
在python3中将urllib和urllib2库合并为urllib,受此影响,开始及程序中有用到request,parse(python2中为urlparse),robotparse都要改下
4.2. csv的writer的open函数也要做出改变
这一点在1中已经提及
4.3. re.findall()
需要添加一句
否则会出现错误,是由于python3与python2的默认编码方式不一样导致的(python3中为unicode)
cannot use a string pattern on a bytes-like object
4.4. 正则表达式
由于实际网页地址和书上有区别,因此需要修改输入的正则表达式
改为
这样就能通过链接不断找到所要爬取的页面
其他一些按下不表,多看两遍程序再理解下~
领取专属 10元无门槛券
私享最新 技术干货