爬取的网站:https://www.names.org/n/kevin/about
URL的秘密
在获取英文名的过程中遇到了第一个问题,9万6千条个姓氏不在同一个页面,如何实现对姓氏的遍历呢?
观察其中一个网址不难发现URL的都是类似https://www.names.org/n/{这里面是英文名}/about的
eg:https://www.names.org/n/kevin/about
https://www.names.org/n/Aadi/about
https://www.names.org/n/Ajani/about
处理这个问题我用for循环就解决了,先读取姓氏然后将加入URL进行遍历
names = ['andy','kand','kevin']
for name in names:
url_Name = 'https://www.names.org/n/'+name+'/about'
取到我们需要的信息
我要获取的数据有:Origin、Meaning、 Gender、EnName
image.png image.png定位这些数据我用的是find()与find_all()函数
乱码问题
在这个项目中遇到过很多乱码问题,大部分都是又有编码或者解码不正确导致,由于这个我也学到了不少。
Python3中有两种数据类型:str和bytes。str类型存储unicode数据,用于向人展示数据,既我们所说的明文。bytes类型用于存储字节数据,用于计算机存储和传输。
明文(str)和字节(bytes)数据之间的转换关系就是编码和解码,从str到bytes叫编码,用encode命令,从bytes到str叫解码,用decode命令。需要注意的是,str数据无法进一步decode,bytes数据也无法进一步encode。
image.png关与编码我还与到过这样的语句
req.encoding='utf-8'
这个只是对编码格式进行设置,并不进行解码或者着解码
str.decode(encoding='UTF-8',errors='strict')
str.encode(encoding='UTF-8',errors='strict')
将我们需要的信息保存到CSV文件中
在这个项目刚开始时我保存文件采用的是csv包,相对简单一些
import csv
with open('fileName.csv', 'a+', encoding='utf-8') as originFile:
spanreader = csv.reader(originFile, delimiter='|')
for row in spanreader:
print(row)
import csv
with open('eggs.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter='| ',
spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
小结
到这里数据就算完全爬取完成了,后面的数据清理任务更加艰巨
这是我开始做的第一个爬虫项目,记得当时初爬取这个网站是花了自己将近一个星期的时间,耗了很长时间,不过收获还是挺多的。
我是一个不喜欢学习的人,看见东西直接上,爬虫之前完全没有接触过连python是什么都不知道就直接开始了这个项目
网友评论