躁动不安的年代,你需要读几本好书(python爬虫及数据分析)

简介: 当今社会,速度已经深入人心了,“快”成了大家默认的办事境界,看机器上一件件飞一般传递着的产品,听办公室一族打电话时那种无人能及的语速......休闲的概念已日渐模糊,大家似乎都变成了在“快咒”控制下的小人儿,似乎连腾出点时间来松口气的时间都没有了,看得见的、看不见的规则约束着我们;有形的、无形的的鞭子驱赶着我们,我们马不停蹄追求事业、爱情、地位、财富,似乎自己慢一拍,就会被这个世界抛弃 工作仅仅是生活的一部分,千万不要忽略了其他乐趣,人生本是一幅美丽的风景画,不必对所有的事情都抱有强烈的目的性,人的一生总有做不完的事情,只要我们有一个平和之心,就不会错过沿途风景。

公众号:pythonislover

当今社会,速度已经深入人心了,“快”成了大家默认的办事境界,看机器上一件件飞一般传递着的产品,听办公室一族打电话时那种无人能及的语速......休闲的概念已日渐模糊,大家似乎都变成了在“快咒”控制下的小人儿,似乎连腾出点时间来松口气的时间都没有了,看得见的、看不见的规则约束着我们;有形的、无形的的鞭子驱赶着我们,我们马不停蹄追求事业、爱情、地位、财富,似乎自己慢一拍,就会被这个世界抛弃

工作仅仅是生活的一部分,千万不要忽略了其他乐趣,人生本是一幅美丽的风景画,不必对所有的事情都抱有强烈的目的性,人的一生总有做不完的事情,只要我们有一个平和之心,就不会错过沿途风景。

一个阳光明媚的早晨,手拿一杯咖啡,翻开一本喜欢的书,也不失为一种人生乐趣,作为IT一族,我们不能只是局限于IT类的数据,要广大自己的视野,提升自己的内在,今天这篇文章我们会给你推荐几本不错的文学书籍,大家一起来看下。

作为一名程序猿,我们不用为该读什么书发愁,因为我们有python,一个号称除了生孩子,什么都可以做的语言。下面进入正题。

本文大概涉及两个方法:

1.书籍信息爬取

​ 1.1 requests 抓取网页

​ 1.2 BeautifulSoup ,re正则分析网页结构

2.信息分析

​ 2.1 pandas 处理文件

​ 2.2 pyecharts 可视化分析

1.网页抓取

目标URL : https://book.douban.com/tag/文学?start=0&type=T
注意start=0,网页的offset是20,后面代码里有体现

我们还是用requests 库来抓取网页信息,下面说下requests 库大致用法

1.常用方法

​ requests.get()
​ requests.post()
​ requests.put()
​ requests.delete()

2.参数

        method  提交方式(一般就是get ,post)
        url     提交地址
        params  GET请求中在URL中传递的参数,如http://xxxx?parameter=xxx 这种方式
        data:    在请求体里传递的数据        
          json     在请求体里传递的数据         
        headers   请求头(一般可以放入Cookie,Referer,User-Agent)
        cookies  Cookies
        files    上传文件       
        auth     headers中加入加密的用户名和密码,是另一种身份验证方法,账号密码在请求时候传过去直接验证,                 这种方式用的比较少        
        timeout  请求和响应的超时时间         
        allow_redirects  是否允许重定向    
        proxies  代理        
        verify   是否忽略证书         
        cert     证书文件        
        stream   一部分一部分的获取数据,不用一次性获取数据,放入内存     
        session: 用于保存客户端历史访问信息
                      

下面正式开始抓取网页信息

#伪装浏览器请求,User-Agent和Cookie 可以用你自己的,怎么取看下面的图
headers = {
'User-Agent': '*******',
'Cookie': '*******'
}


res = requests.get(url,headers=headers,timeout =20) # 获取网页信息,timeout要设置,不然可能因为超时导致抓取信息失败
# print(res.status_code,res.apparent_encoding,res.content,res.encoding) #response响应的一些信息
res.encoding = res.apparent_encoding #设置请求头的编码
response = res.text #获取网页的内容

右击网页----->检查------->network------->按F5刷新网页 就会出现下面的界面(我用的Chrome浏览器)

1557396314353.png

经过上面的几行代码,我能就可以抓取页面的内容了

2.分析网页,抓取数据

这次我们要抓取的信息包括:

书名,链接,作者,出版社,出版日期,价格,评分,评论数,评论内容

我们下面看看怎么获取信息

1557453991021.png

我们可以选择我们想要抓取的信息,下面显示在 div class='article' 这个标签下,到这里先别急写代码,我们可以继续往下看几层,是不是可以搜小我们选择的范围

1557454378956.png

1557454471938.png

我们向下看了几层,发现其实我们想要的数据都在 li class = "subject-item" 这样的标签下,下面我们就可以用BeautifulSoup来分析了

#用lxml方法来解析网页,默认是html.parse
soup = BeautifulSoup(response,'lxml')

#找到所有<li class = "subject-item">这样的标签,注意find_all方法返回的是list类型,下面使用的时候要用for循环,find是只找到第一个符合条件的标签,返回的是bs4.element类型,可以直接调用方法
artiche = soup.find_all('li','subject-item')

下面分别看下我们想要的数据的具体位置,选择第一个 li class = "subject-item" 标签

1557454966673.png

下面所有要的信息,以及标签我在图上做了标识

下面看代码

    #artiche是列表类型,循环操作每个元素
    for item in artiche:
        for i in item.find_all('div','info'): #书名和链接信息
            try:
                if i.find('a').string:  #防止存在没有书名的情况,string是获取a标签的内容
                    book_name = i.find('a').string.strip()  找到第一个a标签
                else:
                    book_name='NULL'
                if  i.find('a').attrs: #获取a标签的的属性
                    book_url = i.find('a').attrs.get('href').strip() #属性时字典方式,用get取数据
                else:
                    book_url =url

                pub_info = i.find('div','pub').string.strip() #出版社信息
                book_info_list = pub_info.split('/')
                #下面都是根据实际情况判断写的内容
                if len(book_info_list)==5:
                    book_auth = book_info_list[0]+','+book_info_list[1]
                    book_publish = book_info_list[2]
                    book_pub_date = book_info_list[3]
                    book_price = re.findall('\d+',book_info_list[4])[0]
                elif len(book_info_list)==4:
                    book_auth = book_info_list[0]
                    book_publish = book_info_list[1]
                    book_pub_date = book_info_list[2]
                    book_price = re.findall('\d+',book_info_list[3])[0]
                else:
                    book_auth = 'NULL'
                    book_publish = book_info_list[0]
                    book_pub_date = book_info_list[1]
                    book_price = re.findall('\d+', book_info_list[2])[0]
               #评分
                rating_nums = i.find('span','rating_nums').string
               #评论数信息
                comment_nums = i.find('span','pl').string.strip()
                comment_nums = re.findall('\d+',comment_nums)
                comment_nums = comment_nums[0]
              #评论内容
                if i.find('p'):
                    comment_content = i.find('p').string.strip().replace('\n','')
                else:
                    comment_content= 'NULL'

                print(book_name,
                      book_url,book_auth,book_publish,
                      book_pub_date,book_price,rating_nums,
                      comment_nums,comment_content)

抓取完信息我们要用pandas的to_csv方法把数据存入csv文件里方便后续分析

               data_dict = {}
                data_dict['书名'] = book_name
                data_dict['链接'] = book_url
                data_dict['作者'] = book_auth
                data_dict['出版社'] = book_publish
                data_dict['出版日期'] = book_pub_date
                data_dict['价格'] = book_price
                data_dict['评分'] = rating_nums
                data_dict['评论数'] = comment_nums
                data_dict['评论内容'] = comment_content


                data_list.append(data_dict)
                
                df = pandas.DataFrame(data_list_all)
               df.to_csv('book.csv', encoding='utf_8_sig')  # encoding解决乱码问题

这样我们的数据抓取就算大功告成了。

3.数据分析

数据分析这段我们使用pyecharts工具,我们大概分析几个方面,自我感觉分析的不是太到位,哈哈,大家主要还是用来学习下怎么使用pyecharts和pandas。

首先我们用pandas分析上面的csv文件,处理下等到我们想要的格式

from pyecharts import Bar,Pie
import pandas as pd

df = pd.read_csv('book.csv')
# print(df.loc[1:10,['书名','评论数']])
dfn = df.dropna(axis=0,subset=['书名'])  #删除书名为空的记录
dfn_comment = dfn.sort_values('评论数',ascending=False).head(20) #根据评论数排序,取前20本书信息
dfn_score = dfn[dfn['评论数']>200000].sort_values('评分',ascending=False).head(20) #根据评分排序,取前20本书信息
# print(dfn['书名'],dfn['评论数'])
# print(dfn.loc[:,['书名','评论数']])

dfn_book_name = dfn_comment['书名'].values.tolist() #把dataframe类型转成list类型
dfn_comment_nums = dfn_comment['评论数'].values.tolist()

dfn_book_name_score = dfn_score['书名'].values.tolist()
dfn_comment_score = dfn_score['评分'].values.tolist()
# print(dfn_book_name,dfn_comment_nums,dfn_comment_score)
# print(type(df),type(dfn))
# print(dfn.dtypes['出版日期']) #打印列类型

#日期类型转换
# dfn['出版日期'] = pd.to_datetime(dfn['出版日期'],errors='coerce') #转换成日期类型
# dfn['出版日期'] = dfn['出版日期'].dt.year #取年份
dfn_pub_date = dfn
dfn_pub_date['出版日期'] = pd.to_datetime(dfn['出版日期'],errors='coerce') #转换成日期类型
dfn_pub_date['出版日期']= dfn['出版日期'].dt.year #取年份

# print(dfn_pub_date)
#根据出版日期年份分组,取出每年出版书籍数量
dfn_n = dfn_pub_date.groupby(['出版日期'],as_index=False)['书名'].size().reset_index(name='count')

#过滤出版数量在10以下的年份
dfn_n = dfn_n[dfn_n['count']>10]
dfn_n_year = dfn_n['出版日期'].values.tolist()
dfn_n_count = dfn_n['count'].values.tolist()


#最多产的出版社
dfn_n_pub = dfn.groupby(['出版社'],as_index=False)['书名'].size().reset_index(name='count')
dfn_n_pub = dfn_n_pub.sort_values('count',ascending=False).head(10)
dfn_n_pub_name = dfn_n_pub['出版社'].values.tolist()
dfn_n_pub_count = dfn_n_pub['count'].values.tolist()

1.根据评论数量和评分,分析大家对那些书敢兴趣,评分比较高

1557456705121.png

1557457009197.png

bar = Bar("豆瓣文学类图书", "评价数量")
bar.add("评论数排名", dfn_book_name, dfn_comment_nums, is_more_utils=True)
# bar.print_echarts_options() # 该行只为了打印配置项,方便调试时使用
bar.render('豆瓣文学评论数分析.html')  # 生成本地 HTML 文件
#

bar = Bar("豆瓣文学类图书", "评价数量")
bar.add("评分排名", dfn_book_name_score, dfn_comment_score, is_more_utils=True)
# bar.print_echarts_options() # 该行只为了打印配置项,方便调试时使用
bar.render('豆瓣文学书籍评分分析.html')  # 生成本地 HTML 文件

从上面看的出来,<<风筝的人>>,<<活着>>,<<解忧杂货店>>,<<小王子>>,<<白夜行>>等书,还是值得我们一看的,大家也可以上豆瓣读书上看下,网站自己有个综合排名,感觉和我分析的差不多,有兴趣可以自己看下。

2.各年份出版的书籍数量

1557455812821.png

pie = Pie("各年份出版书籍数量分布饼图", title_pos='center')
pie.add("", dfn_n_year, dfn_n_count, radius=[40, 75],
    label_text_color=None,
    is_label_show=True,
    legend_orient="vertical",
    legend_pos="left")
# pie.show_config()
pie.render('年份出版书籍数量分布饼图.html')

我们看随着时间的推进,人们对书籍的需求也越来越大,从1999-2019,书籍的出版数量呈上升趋势。

3.各大出版的发行书籍数据占比

1557455832083.png

pie = Pie("各出版社出版书籍数量分布饼图", title_pos='center')
pie.add("", dfn_n_pub_name, dfn_n_pub_count, radius=[40, 75],
    label_text_color=None,
    is_label_show=True,
    legend_orient="vertical",
    legend_pos="left")
# pie.show_config()
pie.render('各出版社出版书籍数量分布饼图.html')

出版社的分析,大家自己看下就行。

最后还是那句话,工作再忙,也要享受片刻的读书时光,减少焦虑。

大家如果有兴趣可以拿的代码自己执行抓取数据,自己做点自己想要知道的分析。

源代码获取关注公众号:pythonislover ,回复“看书”, 即可。

目录
相关文章
|
2月前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
13天前
|
数据采集 JSON 数据格式
Python爬虫:京东商品评论内容
京东商品评论接口为商家和消费者提供了重要工具。商家可分析评论优化产品,消费者则依赖评论做出购买决策。该接口通过HTTP请求获取评论内容、时间、点赞数等数据,支持分页和筛选好评、中评、差评。Python示例代码展示了如何调用接口并处理返回的JSON数据。应用场景包括产品优化、消费者决策辅助、市场竞争分析及舆情监测。
|
24天前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
63 3
|
2月前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
2月前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
2月前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
2月前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
3月前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。