美文网首页
从names.org网站获取英文名人

从names.org网站获取英文名人

作者: K同学啊 | 来源:发表于2018-07-14 19:10 被阅读26次

    爬取的网站: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是什么都不知道就直接开始了这个项目

    相关文章

      网友评论

          本文标题:从names.org网站获取英文名人

          本文链接:https://www.haomeiwen.com/subject/jevypftx.html