用python+selenium抓取豆瓣读书中最受关注图书并按评分排序
抓取豆瓣读书中的(http://book.douban.com/)最受关注图书,按照评分排序,并保存至txt文件中,需要抓取书籍的名称,作者,评分,体裁和一句话评
方法一:
#coding=utf-8
from selenium import webdriver
from time import sleep
class DoubanPopularBook:
def __init__(self):
self.dr = webdriver.Chrome()
self.popular_books_list = self.get_douban_popular_books()
def get_douban_popular_books(self):
self.dr.get('https://book.douban.com/')
sleep(3)
popular_books_list = [] #定义一个空list用于存放获取的书籍信息
i = 0
while i < 10: #总共10本书
book_info = self.dr.find_elements_by_css_selector("[class='list-col list-col2 list-summary s']>li")[i].text #通过css用class属性和标签li组合来获取书籍所有文本信息
popular_books_list.append(book_info.split('\n')) #向空list追加书籍信息用并换行符隔开
i += 1 #每本书籍的li标签间隔为1
#popular_books_list.sort(key=lambda x:float(x[1][0:3]), reverse=True) #用sort中key方法根据书籍评分从高到低进行排序
popular_books_list = sorted(popular_books_list, key=lambda book:float(book[1][0:3]), reverse=True)
return popular_books_list
def get_popular_books_rank_file(self):
self.file_title = '豆瓣最受关注图书榜之评分排行'
self.file = open(self.file_title + '.txt', 'wb')
for item in self.popular_books_list:
separate_line = '~~~~~~~~~~~~~~~~~~~~~~~~\n'
self.file.write(separate_line.encode('utf-8'))
self.file.write(('书籍名称:'+item[0]+'\n').encode('utf-8'))
self.file.write(('评分:'+item[1]+'\n').encode('utf-8'))
self.file.write((item[2]+'\n').encode('utf-8'))
self.file.write(('体裁:'+item[3]+'\n').encode('utf-8'))
if item[4] == '有电子书':
self.file.write(('一句话评论:'+item[5]+'\n').encode('utf-8'))
else:
self.file.write(('一句话评论:'+item[4]+'\n').encode('utf-8'))
self.file.close()
def quit(self):
self.dr.quit()
if __name__ == '__main__':
popular_books = DoubanPopularBook()
popular_books.get_popular_books_rank_file()
popular_books.quit()
方法二:
#coding=utf-8
from selenium import webdriver
from time import sleep
class DoubanPopularBook:
def __init__(self):
self.dr = webdriver.Chrome()
self.popular_books_list = self.get_douban_popular_books()
def get_douban_popular_books(self):
self.dr.get('https://book.douban.com/')
sleep(3)
popular_books_list = [] #定义一个空list用于存放获取的书籍信息
i = 0
while i < 10: #总共10本书
book_name = self.dr.find_elements_by_xpath("//h4[@class='title']/a")[i].text #定位书籍名称
book_grade = self.dr.find_elements_by_css_selector('.average-rating')[i].text #定位评分
book_auther = self.dr.find_elements_by_xpath("//p[@class='author']")[i].text #定位作者
book_genre = self.dr.find_elements_by_css_selector('.book-list-classification')[i].text #定位体裁
book_comment = self.dr.find_elements_by_css_selector('.reviews')[i].text #定位一句话评论
popular_books_list.append([book_name, book_grade, book_auther, book_genre, book_comment]) #向空list追加书籍信息
i += 1 #每本书籍间隔为1
popular_books_list = sorted(popular_books_list, key=lambda x:float(x[1]), reverse=True) #用sorted方法按评分从高到低排序
return popular_books_list
def get_popular_books_rank_file(self):
self.file_title = '豆瓣最受关注图书榜之评分排行'
self.file = open(self.file_title + '.txt', 'wb')
for item in self.popular_books_list:
separate_line = '~~~~~~~~~~~~~~~~~~~~~~~~\n'
self.file.write(separate_line.encode('utf-8'))
self.file.write(('书籍名称:'+item[0]+'\n').encode('utf-8'))
self.file.write(('评分:'+item[1]+'\n').encode('utf-8'))
self.file.write((''+item[2]+'\n').encode('utf-8'))
self.file.write(('体裁:'+item[3]+'\n').encode('utf-8'))
self.file.write(('一句话评论:'+item[4]+'\n').encode('utf-8'))
self.file.close()
def quit(self):
self.dr.quit()
if __name__ == '__main__':
popular_books = DoubanPopularBook()
popular_books.get_popular_books_rank_file()
popular_books.quit()
方法三:
# coding=utf-8
from selenium import webdriver
import unittest
from time import sleep
class DoubanBooks(unittest.TestCase):
def setUp(self):
self.dr = webdriver.Chrome()
self.popular_books_list = self.get_douban_popular_books()
self.books = self.get_popular_books_rank_file()
def get_douban_popular_books(self):
self.dr.get("https://book.douban.com/")
sleep(5)
book_name = self.dr.find_elements_by_xpath("//h4[@class='title']/a") #定位书名
book_author = self.dr.find_elements_by_xpath("//p[@class='author']") #定位作者
book_grade = self.dr.find_elements_by_xpath("//span[@class='average-rating']") #定位评分
book_genre = self.dr.find_elements_by_xpath("//p[@class='book-list-classification']") #定位体裁
book_comment = self.dr.find_elements_by_xpath("//p[@class='reviews']") #定位评论
douban_most_popular_book_list = [] #定义空list用来放置书籍信息
x = 0
while x < len(book_name): #数目为书名的个数
douban_most_popular_book_list.append([book_name[x].text, book_author[x].text, book_grade[x].text, book_genre[x].text,book_comment[x].text])
x += 1
douban_most_popular_book_list = sorted(douban_most_popular_book_list, key=lambda book_grade: book_grade[2],reverse=True) #用sorted方法按评分从高到低排名
return douban_most_popular_book_list
def get_popular_books_rank_file(self):
self.file_title = '豆瓣最受关注图书榜之评分排行'
self.file = open(self.file_title + '.txt', 'wb')
for item in self.popular_books_list:
separate_line = '~~~~~~~~~~~~~~~~~~~~~~~~\n' #分隔符
self.file.write(separate_line.encode('utf-8'))
self.file.write(('书籍名称:'+item[0]+'\n').encode('utf-8'))
self.file.write((''+item[1]+'\n').encode('utf-8'))
self.file.write(('评分:'+item[2]+'\n').encode('utf-8'))
self.file.write(('体裁:'+item[3]+'\n').encode('utf-8'))
self.file.write(('一句话评论:'+item[4]+'\n').encode('utf-8'))
self.file.close()
def test_books(self):
pass
print("获取完毕")
def tearDown(self):
self.dr.quit()
if __name__ == "__main__":
unittest.main()
网页如下:


生成txt效果如下:

用python+selenium抓取豆瓣读书中最受关注图书并按评分排序的更多相关文章
- 用python+selenium抓取豆瓣电影中的正在热映前12部电影并按评分排序
抓取豆瓣电影(http://movie.douban.com/nowplaying/chengdu/)中的正在热映前12部电影,并按照评分排序,保存至txt文件 #coding=utf-8 from ...
- Python爬虫----抓取豆瓣电影Top250
有了上次利用python爬虫抓取糗事百科的经验,这次自己动手写了个爬虫抓取豆瓣电影Top250的简要信息. 1.观察url 首先观察一下网址的结构 http://movie.douban.com/to ...
- 哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说
<哪吒之魔童降世>这部国产动画巅峰之作,上映快一个月时间,票房口碑双丰收. 迄今已有超一亿人次观看,票房达到42.39亿元,超过复联4,跻身中国票房纪录第三名,仅次于<战狼2> ...
- 用python+selenium抓取微博24小时热门话题的前15个并保存到txt中
抓取微博24小时热门话题的前15个,抓取的内容请保存至txt文件中,需要抓取排行.话题和阅读数 #coding=utf-8 from selenium import webdriver import ...
- 用python+selenium抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答并保存至html文件
抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答,保存至html文件,该html文件的文件名应该是20160228_zhihu_today_hot.html,也就是日期+zhihu_toda ...
- PHP抓取豆瓣读书爬虫代码
<?php//演示地址 http://asizu.sinaapp.com/reptile_douban.php//数据量不是特别大,没有写抓完数据便停止. 喜欢的朋友拿去自己改改就好了 head ...
- python爬虫抓取豆瓣电影
抓取电影名称以及评分,并排序(代码丑炸) import urllib import re from bs4 import BeautifulSoup def get(p): t=0 k=1 n=1 b ...
- Python爬虫爬取豆瓣读书
一,准备工作. 工具:win10+Python3.6 爬取目标:爬取图中红色方框的内容. 原则:能在源码中看到的信息都能爬取出来. 信息表现方式:CSV转Excel. 二,具体步骤. 先给出具体代码吧 ...
- Python抓取豆瓣电影top250!
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:404notfound 一直对爬虫感兴趣,学了python后正好看到 ...
随机推荐
- iOS语音
<span style="white-space:pre"> </span>语音技术近来可是出遍了风头,从iphone4s的siri,到微信的语音聊天 ...
- 转别人的 STM32外部中断使用注意事项
前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark. 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 ST ...
- recovery编译问题汇总
1.修改支持USB大容量存储 (1).首先需要查看手机lun位置 手机链接电脑,打开cmd命令行,依次输入以下命令: adb shell find /sys -name "lun" ...
- 给vs2010换皮肤
http://www.cnblogs.com/aolinwxfx/articles/2379252.html O(∩_∩)O哈哈~,很不错哦
- 《数据结构》2.2顺序表(sequence list)
//顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...
- Bootstrap <基础十八>面包屑导航(Breadcrumbs)
面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...
- ICEM(2)—机翼翼稍网格绘制
有时我们需要观察翼尖涡,这就需要将机翼全部被网格包围.但是网上比较多的教程都是机翼边缘即为网格边缘,机翼位于网格内部的不多.若是直接将网格拉伸,则会产生结构和非结构网格交错的情况.下面是绘制步骤 1. ...
- django:field字段类型
字段类型(Field types) AutoField 它是一个根据 ID 自增长的 IntegerField 字段.通常,你不必直接使用该字段.如果你没在别的字段上指定主 键,Django 就会自动 ...
- [转]as3 算法实例【输出1 到最大的N 位数 题目:输入数字n,按顺序输出从1 最大的n 位10 进制数。比如输入3,则输出1、2、3 一直到最大的3 位数即999。】
思路:如果我们在数字前面补0的话,就会发现n位所有10进制数其实就是n个从0到9的全排列.也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的10进制数. /** *ch 存放数字 *n n ...
- 浅谈c语言结构体
对于很多非计算机专业来说,c语言课程基本上指针都不怎么讲,更别说后面的结构体了.这造成很多学生对结构体的不熟悉.这里我就浅谈一下我对结构体的认识. 结构体,就是我们自己定义出一种新的类型,定义好之后, ...