抓取豆瓣读书中的(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抓取豆瓣读书中最受关注图书并按评分排序的更多相关文章

  1. 用python+selenium抓取豆瓣电影中的正在热映前12部电影并按评分排序

    抓取豆瓣电影(http://movie.douban.com/nowplaying/chengdu/)中的正在热映前12部电影,并按照评分排序,保存至txt文件 #coding=utf-8 from ...

  2. Python爬虫----抓取豆瓣电影Top250

    有了上次利用python爬虫抓取糗事百科的经验,这次自己动手写了个爬虫抓取豆瓣电影Top250的简要信息. 1.观察url 首先观察一下网址的结构 http://movie.douban.com/to ...

  3. 哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说

    <哪吒之魔童降世>这部国产动画巅峰之作,上映快一个月时间,票房口碑双丰收. 迄今已有超一亿人次观看,票房达到42.39亿元,超过复联4,跻身中国票房纪录第三名,仅次于<战狼2> ...

  4. 用python+selenium抓取微博24小时热门话题的前15个并保存到txt中

    抓取微博24小时热门话题的前15个,抓取的内容请保存至txt文件中,需要抓取排行.话题和阅读数 #coding=utf-8 from selenium import webdriver import ...

  5. 用python+selenium抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答并保存至html文件

    抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答,保存至html文件,该html文件的文件名应该是20160228_zhihu_today_hot.html,也就是日期+zhihu_toda ...

  6. PHP抓取豆瓣读书爬虫代码

    <?php//演示地址 http://asizu.sinaapp.com/reptile_douban.php//数据量不是特别大,没有写抓完数据便停止. 喜欢的朋友拿去自己改改就好了 head ...

  7. python爬虫抓取豆瓣电影

    抓取电影名称以及评分,并排序(代码丑炸) import urllib import re from bs4 import BeautifulSoup def get(p): t=0 k=1 n=1 b ...

  8. Python爬虫爬取豆瓣读书

    一,准备工作. 工具:win10+Python3.6 爬取目标:爬取图中红色方框的内容. 原则:能在源码中看到的信息都能爬取出来. 信息表现方式:CSV转Excel. 二,具体步骤. 先给出具体代码吧 ...

  9. Python抓取豆瓣电影top250!

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:404notfound  一直对爬虫感兴趣,学了python后正好看到 ...

随机推荐

  1. jquery性能

    1. 使用最新版本的jQuery jQuery的版本更新很快,你应该总是使用最新的版本.因为新版本会改进性能,还有很多新功能. 下面就来看看,不同版本的jQuery性能差异有多大.这里是三条最常见的j ...

  2. AppFog免费云空间申请及安装wordpress(图文教程)

    AppFog是一家提供运算平台的服务,用户可以在上面搭建自己的Web App.原本它的名字为PHPFog,但在采用了Cloud Foundry的代码作为核心,支持多个编程语言后,选择了更名.AppFo ...

  3. SCSS

    CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行编码工作. 通俗的说,“CSS ...

  4. java获取当前时间前一周、前一月、前一年的时间

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calend ...

  5. 第三篇:Retrofit SDK的设计思路

    2016-05-08 15:24:03 Retreofit毫无疑问是一个优美的开源框架,有轻量级.耦合性低.扩展性好.灵活性高的特点,那么Retrofit的设计者们到底是怎么样做到这些的呢?我希望能够 ...

  6. 异步函数封装请确保异步性(Javascript需要养成的良好习惯)

    背景假设: 你有许多的配置信息存放在服务器上,因为配置太多,不希望每次都把所有的配置信息都写到前端,希望能需要用的时候再获取就好了. 因为Javascript单线程运行,你不希望堵塞ui渲染于是你专门 ...

  7. “如何稀释scroll事件”的思考(不小心写了个异步do...while)

    看了下园友的一帖子:http://www.cnblogs.com/xzhang/p/4145697.html#commentform 本来以为是很简单的问题,但仔细想想还挺有意思的.简单的说就是增加事 ...

  8. MFC-01-Chapter01:Hello,MFC---1.3 第一个MFC程序(03)

    1.3.2 MFC如何使用应用程序对象 MFC程序没有main函数,没有WinMain函数,到底是什么启动了程序的运行? 一个MFC提供的源代码中(Winmain.cpp)包含了一个AfxWinMai ...

  9. Android 振动器

    今天介绍一下Android的振动器Vibrator,有三个方法来控制手机振动: 1.void vibrate(long milliseconds):控制手机振动milliseconds毫秒. 2.vo ...

  10. extjs之apply

    ext.apply(Ext.Form.VTypes,{}) {}里面的内容如下: { password:function (val.field) { if(field.initialPassField ...