前言
上次使用了BeautifulSoup库爬取电影排行榜,爬取相对来说有点麻烦,爬取的速度也较慢。本次使用的lxml库,我个人是最喜欢的,爬取的语法很简单,爬取速度也快。
本次爬取的豆瓣书籍排行榜的首页地址是:
https://www.douban.com/doulist/1264675/"color: #ff0000">步骤一:
分析网页源代码可以看到,书籍信息在属性为的div标签中,打开发现,我们需要爬取的信息都在标签内部,通过xpath语法我们可以很简便的爬取所需内容。
(书籍各类信息所在标签)
所需爬取的内容在 class为post、title、rating、abstract的div标签中。
步骤二:
先定义爬取函数,爬取所需内容执行函数,并存入csv文件
具体代码如下:
import requests from lxml import etree import time import csv #信息头 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' } #定义爬取函数 def douban_booksrank(url): res = requests.get(url, headers=headers) selector = etree.HTML(res.text) contents = selector.xpath('//div[@class="article"]/div[contains(@class,"doulist-item")]') #循环点 for content in contents: try: title = content.xpath('div/div[2]/div[3]/a/text()')[0] #书名 scores = content.xpath('div/div[2]/div[4]/span[2]/text()') #评分 scores.append('9.0') #因为有一些书没有评分,导致列表为空,此处添加一个默认评分,若无评分则默认为9.0 score = scores[0] comments = content.xpath('div/div[2]/div[4]/span[3]/text()')[0] #评论数量 author = content.xpath('div/div[2]/div[5]/text()[1]')[0] #作者 publishment = content.xpath('div/div[2]/div[5]/text()[2]')[0] #出版社 pub_year = content.xpath('div/div[2]/div[5]/text()[3]')[0] #出版时间 img_url = content.xpath('div/div[2]/div[2]/a/img/@src')[0] #书本图片的网址 img = requests.get(img_url) #解析图片网址,为下面下载图片 img_name_file = 'C:/Users/lenovo/Desktop/douban_books/{}.png'.format((title.strip())[:3]) #图片存储位置,图片名只取前3 #写入csv with open('C:\\Users\lenovo\Desktop\\douban_books.csv', 'a+', newline='', encoding='utf-8')as fp: #newline 使不隔行 writer = csv.writer(fp) writer.writerow((title, score, comments, author, publishment, pub_year, img_url)) #下载图片,为防止图片名导致格式错误,加入try...except try: with open(img_name_file, 'wb')as imgf: imgf.write(img.content) except FileNotFoundError or OSError: pass time.sleep(0.5) #睡眠0.5s except IndexError: pass #执行程序 if __name__=='__main__': #爬取所有书本,共22页的内容 urls = ['https://www.douban.com/doulist/1264675/"text-align: center">步骤三:
本次使用Python常用的数据分析库pandas来提取所需内容。pandas的read_csv()函数可以读取csv文件并根据文件格式转换为Series、DataFrame或面板对象。
此处我们提取的数据转变为DataFrame(数据帧)对象,然后通过Matplotlib绘图库来进行绘图。
具体代码如下:
from matplotlib import pyplot as plt import pandas as pd import re plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 plt.subplots_adjust(wsapce=0.5, hspace=0.5) #调整subplot子图间的距离 pd.set_option('display.max_rows', None) #设置使dataframe 所有行都显示 df = pd.read_csv('C:\\Users\lenovo\Desktop\\douban_books.csv') #读取csv文件,并赋为dataframe对象 comment = re.findall('\((.*"text-align: center">本次分析的内容也较为简单,从上面的几个图形中我们也能得出一些结论。
这些高分书籍中绝大多数的评论数量都在50000以下;多数排行榜上的高分书籍都出版在2000年以后;出版年份在2000年后的书籍有更多的评论数量。
以上数据也见解的说明了在进入二十世纪后我国的图书需求量更大了,网络更发达,更多人愿意发表自己的看法。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]