# 需求:
爬取小猪网上的详细租房信息,实现遍历爬取,并且把结果放到excel保存。
##数据内容:
title,price,address,host_name, rating, img_path
# 结果:
# 代码:
'''
abcdefg
'''
- first one
-second one
难点和经验:
1. split()方法
str =' www.test111.com.cn '
print(str.split())#前后去空格,按照空格分隔
print(str.split("."))#按照“.”分隔
print(str.split(".")[-3])#取分隔后的第几位
print(str.split(".",1))#分隔1次
print(str.split(".",2))#分隔2次
str2 =''.join(str.split())#列表转字符串
print(str2.split("."))
list2 =list(str)
print(list2)#字符串转列表
输出:
['www.test111.com.cn']
[' www', 'test111', 'com', 'cn ']
test111
[' www', 'test111.com.cn ']
[' www', 'test111', 'com.cn ']
['www', 'test111', 'com', 'cn']
[' ', ' ', ' ', 'w', 'w', 'w', '.', 't', 'e', 's', 't', '1', '1', '1', '.', 'c', 'o', 'm', '.', 'c', 'n', ' ', ' ', ' ']
2. encoding问题
因为在某条记录的title上有个类似于花朵的特殊字符❀,所有无法编码。
报了类似于这样的错误:Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/untitled/spider/160822_xiaozhu.py", line 41, inwriter.writerow([dict2['title'],dict2['price'],dict2['address'],dict2['host_name'],dict2['rating'],dict2['img']])
UnicodeEncodeError: 'gbk' codec can't encode character '\u273f' in position 0: illegal multibyte sequence。
后来上网查询了中文编码的各种类型:
1、GB2312
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
在windows中的代码页是CP936
2、GBK
GBK最初是由微软对GB2312的扩展,也就是CP936字码表(Code Page 936)的扩展(原来的CP936和GB 2312-80一模一样),最初出现于Windows 95简体中文版中,由于Windows产品的流行和在大陆广泛被使用,中华人民共和国国家有关部门将其作为技术规范。注意GBK并非国家正式标准,只是国家技术监督局标准化司、电子工业部科技与质量监督司发布的“技术规范指导性文件”。虽然GBK收录了所有Unicode 1.1及GB 13000.1-93之中的汉字,但是编码方式与Unicode 1.1及GB 13000.1-93不同。仅仅是GB 2312到GB 13000.1-93之间的过渡方案。GBK收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。
GBK作为对GB2312的扩展,在现在的windows系统中仍然使用代码页CP936表示,但是同样的936的代码页跟一开始的936的代码页只支持GB2312编码不同,现在的936代码页支持GBK的编码,GBK同时也向下兼容GB2312编码。
3、GB18030
2000年的GB18030取代了GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
GB18030在windows中的代码页是CP54936。
4、GB13000
GB13000等同于国际标准的《通用多八位编码字符集(UCS)》ISO10646.1,就是等同于Unicode的标准,代码页等等的都使用UTF的一套标准。
从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集(DBCS)。
原因以及解决办法,这个类似于❀的中文字符应该是超过了GBK和GB2312的字符全集,所以在打开csv的时候encoding参数设置成GB19030就可以顺利解码并且在CSV上正确显示中文。
csvFile=open("d:/files/test.csv",'w+',newline='',encoding='GB18030')