100 行代码找出你中意的书

   阅读文本大概需要 5 分钟

此文首发于「brucepk」公众号,欢迎大家去关注。

炎热的夏天,酷暑难挡,难免会心烦意燥,睡前随手拿起枕边看过很多遍的「平凡的世界」。看书,会让躁动的心瞬间安静下来。

生活不能等待别人来安排,要自己去争取和奋斗;而不论其结果是喜是悲,但可以慰藉的是,你总不枉在这世界上活了一场。有了这样的认识,你就会珍重生活,而不会玩世不恭;同时,也会给人自身注入一种强大的内在力量。
——路遥 《平凡的世界》

读完一本书后,是不是发现找不到合适的书看了?今天就给大家分享下怎么用 python 爬虫找出你中意的书。

今天的目标网站是豆瓣读书,把豆瓣读书里的书本信息爬取下来,保存为 csv 文件,保存的信息包括:书籍类型、书籍名称、作者、译者、豆瓣评分、出版社、出版日期、评价人数、价格、简介。

爬取结果:

项目环境

语言环境:python 3.6
编辑工具:PyCharm
导包:requests、BeautifulSoup、time、random、csv

程序结构:

程序主要是由 6 个函数组成:
get_html():用 requests 请求页面,返回页面 html 源码。
get_pageurl(base_url):从 html 源码中提取分页链接部分字段。
def bookinfo(url):提取图书信息,以列表形式返回。
get_num(person):判断评价人数,没有评价人数的图书按 10 人处理。
write2csv():将图书信息保存为 csv 文件。
main():程序执行的主函数。

程序思路:
1.分析豆瓣读书链接,分析分页链接规律。
2.循环提取链接中书本信息。
3.将书本信息保存为 csv 文件

源码请求

为了防止反爬,需要模拟真实浏览器访问,请求网页时加入代理 IP 和请求头 headers。

分析不同的图书标签的规律,发现是只是链接后面的 tag 不同,从源码中提取全部 tag 和固定 url 进行拼接形成新的 url 链接列表并返回。

提取图书信息

data=[]
    for bookname, detail, rating, person, intro in zip(booknames, details, ratings, peoples, intros):
        info = {}
        try:
            info['类型']=tag
            booktitle = bookname.get_text().split()[0]
            info['书籍名称'] = booktitle
            author = detail.get_text().split('/', 4)[0].lstrip('\n          ').rstrip('\n        ')
            info['作者'] = author
            translator = detail.get_text().split('/', 4)[1]
            info['译者'] = translator
            rating_num = rating.get_text()  # 评分
            info['豆瓣评分'] = rating_num
            press = detail.get_text().split('/', 4)[2]
            info['出版社'] = press
            date = detail.get_text().split('/', 4)[3].split('-')[0]
            info['出版日期'] = date
            price = detail.get_text().split('/', 4)[4].lstrip('\n          ').rstrip('\n        ')
            info['价格'] = price
            person = get_num(person)  # 评价人数
            info['评价人数'] = person
            introduction = intro.get_text()
            info['简介'] = introduction
            data.append(info)
        except IndexError:
            try:
                info['类型'] = tag
                booktitle = bookname.get_text().split()[0]
                info['书籍名称'] = booktitle
                author = detail.get_text().split('/', 3)[0].lstrip('\n          ').rstrip('\n        ')
                info['作者'] = author
                translator = ""
                info['译者'] = translator
                press = detail.get_text().split('/', 3)[1]
                rating_num = rating.get_text()
                info['豆瓣评分'] = rating_num
                info['出版社'] = press
                date = detail.get_text().split('/', 3)[2].split('-')[0]
                info['出版日期'] = date
                price = detail.get_text().split('/', 3)[3].lstrip('\n          ').rstrip('\n        ')
                info['价格'] = price
                person = get_num(person)
                info['评价人数'] = person
                introduction = intro.get_text()
                info['简介'] = introduction
            except (IndexError, TypeError):
                continue
        except TypeError:
            continue
    return data

这里对有译者图书信息的提取和没有译者的图书信息提取分开做了处理。

数据保存

将数据通过循环跳转分页保存数据,每次分页时加了个随机等待几秒的操作,反爬虫操作。
这样,你就可以打开爬下来 CSV 图书文件,用 Excel 打开,通过豆瓣评分和简介来找你中意的书了。

源代码我已上传到 Github 上,需要的同学可以点击「阅读原文」,如果觉得程序还不错的话,可以给我项目点个 star。在微信后台回复「豆瓣读书」也可以获取源码。

推荐阅读

python 爬虫爬取煎蛋网妹子图(公众号可点击跳转)

本公众号专注:

1.python 技术分享

2.python 爬虫分享

3.资料、工具共享

 欢迎关注我们,一起成长!


我建一个技术交流群,群里有大佬,可以进群一起讨论学习,共同进步。进群方式见公众号联系方式处。
群里我用 python 写了个微信机器人,欢迎体验!

猜你喜欢

转载自blog.csdn.net/m0_37615390/article/details/81240961
100