由于我有一个喜欢看书的室友,最近比较闹书荒,我想着爬取一下豆瓣评分Top250的图书,看看他有没有想看的,我是本着学习的态度加双赢的结果(并不是为了装那啥。。。

爬取目标
+ 爬取豆瓣评分Top250的图书
+ 获取每本图书的详细信息
+ 把爬取结果存入Excel中

0、爬取效果


1、分析URL

爬取的目标url为,https://book.douban.com/top250?start=0,这也是一个多页的爬取,url的规则为,start=0,25,分别为第一页,第二页,分别对应着每页的25本图书
需要爬取的整体内容

这次采用的是BeautifuSoup

    def getBooks(self):pageCode = self.getPage()bsObj = BeautifulSoup(pageCode, 'lxml')for book in bsObj.findAll("td", {"valign": "top"}):if book.find('div',{'class':re.compile(r'pl[2]{1}')})==None:continuebookUrl = book.a['href'].strip()                #图书详细信息的链接title = '《' + book.a['title'].strip() + '》'     #图书标题detail = book.find('p',{'class':'pl'}).get_text().split('/')    #图书相关细节author = detail[0].strip()      #图书作者if len(detail)==5:translator = detail[1].strip()  #图书译者press = detail[2].strip()       #出版社date = detail[3].strip()        #出版日期price = detail[4].strip()       #图书价格else:translator = ''press = detail[1].strip()date = detail[2].strip()price = detail[3].strip()score = book.find('span',{'class':'rating_nums'}).get_text().strip()    #图书评分scoreNum = book.find('span',{'class':'pl'}).get_text().strip('(').strip(')').strip()    #图书评价人数quote = book.find('span',{'class':'inq'}).get_text()        #简述self.book_list.append([title,author,translator,quote,press,date,price,score,scoreNum,bookUrl])

2、爬取内容存入到EXCEl

import xlwt
def load(self,datalist):file = xlwt.Workbook()sheet = file.add_sheet('豆瓣图书Top250',cell_overwrite_ok=True)col = (u'图书名字',u'作者',u'译者',u'引述',u'出版社',u'发行日期',u'价格',u'评分',u'评价标准',u'图书详细链接')for i in range(0,10):sheet.write(0,i,col[i]) #列名for i in range(0,250):data = datalist[i]for j in range(0,10):sheet.write(i+1,j,data[j])    #数据file.save('豆瓣图书Top250.xls')

3、整体代码

# coding:utf-8
"""
https://book.douban.com/top250?start=0
爬取豆瓣图书评分最高的前250本,
第一页:start=0,第二页:start=25......
"""
from urllib.request import urlopen
from urllib.request import Request
from urllib.error import URLError
from bs4 import BeautifulSoup
import re
import xlwtclass DoubanBook:def __init__(self, pageIndex):self.pageIndex = 0self.user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' \'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'self.headers = {'User-Agent': self.user_agent}self.book_list = []def getPage(self):try:url = 'https://book.douban.com/top250?' + str(self.pageIndex)request = Request(url, headers=self.headers)response = urlopen(request)page = response.read().decode('utf-8')return pageexcept URLError as e:if hasattr(e, 'reason'):print("爬取失败,失败原因:", e.reason)def getBooks(self):pageCode = self.getPage()bsObj = BeautifulSoup(pageCode, 'lxml')for book in bsObj.findAll("td", {"valign": "top"}):if book.find('div',{'class':re.compile(r'pl[2]{1}')})==None:continuebookUrl = book.a['href'].strip()title = book.a['title'].strip()detail = book.find('p',{'class':'pl'}).get_text().split('/')author = detail[0].strip()if len(detail)==5:translator = detail[1].strip()press = detail[2].strip()date = detail[3].strip()price = detail[4].strip()else:translator = ''press = detail[1].strip()date = detail[2].strip()price = detail[3].strip()score = book.find('span',{'class':'rating_nums'}).get_text().strip()scoreNum = book.find('span',{'class':'pl'}).get_text().strip('(').strip(')').strip()quote = book.find('span',{'class':'inq'}).get_text()self.book_list.append([title,author,quote,press,date,price,score,scoreNum,bookUrl])def load(self,datalist):file = xlwt.Workbook()sheet = file.add_sheet('豆瓣图书Top250',cell_overwrite_ok=True)col = (u'图书名字',u'作者',u'引述',u'出版社',u'发行日期',u'价格',u'评分',u'评价标准',u'图书详细链接')for i in range(0,9):sheet.write(0,i,col[i]) #列名for i in range(0,250):data = datalist[i]for j in range(0,9):sheet.write(i+1,j,data[j])    #数据file.save('豆瓣图书Top250.xls')def start(self):print('现开始抓取豆瓣图书Top250的数据:')while self.pageIndex<=225:print('现抓取第%d页'% (self.pageIndex/25+1))self.getBooks()self.pageIndex+=25print("抓取完成")self.load(self.book_list)book = DoubanBook(0)
book.start()

爬取豆瓣Top250图书【Beautiful】相关推荐

  1. Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

      先来看看页面长啥样的:https://book.douban.com/top250   我们将要爬取哪些信息:书名.链接.评分.一句话评价--   1. 爬取单个信息 我们先来尝试爬取书名,利用之 ...

  2. python爬取豆瓣图书top250_「豆瓣读书250」爬取豆瓣TOP250书单 - seo实验室

    豆瓣读书250 小白学习爬虫 爬取豆瓣TOP250的书,正好本人也喜欢看书 思路分析: https://book.douban.com/top250这是TOP250第一页的链接 https://boo ...

  3. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  4. python豆瓣历史评分_Python实战-爬取豆瓣top250评分高于指定值的电影信息

    思路 1. 要获得怎么样的数据 2. 找到数据来源 3. 模拟浏览器发送请求获得数据 4. 处理数据,保存数据 第一步: 在这里数据是豆瓣top250中高于指定分数的电影信息 信息有:名称,评分,格言 ...

  5. lxml 爬取豆瓣top250

    lxml 爬取豆瓣top250 菜鸟奋战10小时,得到豆瓣top250 from time import sleepimport urllib3 import pandas as pd urllib3 ...

  6. 爬取豆瓣top250电影并分析

    爬取豆瓣top250电影,提取评论关键词,然后将同一国家的关键词做成一个词云,轮廓是每个国家的地图轮廓 爬取数据 需要爬取电影名称.导演.年份.地区和前10个评论除了地区,其他的都没什么问题,我们来研 ...

  7. Python 爬取周杰伦歌曲信息,爬取豆瓣top250的电影,并保存至excel中

    使用requests.BeautifulSoup模块,在网上爬取信息.有的网页可以直接爬取到,有些则需要分步加载,这时就需要使用network进行分析找到信息对应的请求. 有的会反爬虫,则需要添加he ...

  8. python 爬取豆瓣某一主题书单_Python爬虫 || 使用requests和xpath爬取豆瓣Top250书单内容全解。...

    昨天,我们了解了如何爬取豆瓣某一个电影固定的位置信息,包含电影名称.导演.演员及评分等,今天我们来了解一下如何爬取豆瓣Top250书单,并如何将爬取到的内容存放到本地. 废话不多说了,shou my ...

  9. scrapy爬取豆瓣top250电影数据

    scrapy爬取豆瓣top250电影数据 scrapy框架 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. sc ...

最新文章

  1. Windows平台下程序打包流程
  2. vdsm的SSL证书验证过程
  3. icem密度盒怎么设置_seo中关键词密度的问题
  4. Android studio .gitignore 文件的内容
  5. c++ static 关键字用法
  6. Adobe (Acrobat)Reader 6.0以上版本支持对有特殊权限的PDF进行添加注释,填写标单以及保存的功能。...
  7. Servlet生命周期和方法
  8. 《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.2 使用窗口函数的解决方案简介...
  9. java中各种数据类型的使用
  10. Java构造方法的继承调用
  11. C++之导入lib库
  12. 【Android】 修复ijkPlayer进行m3u8 hls流播放时seek进度条拖动不准确的问题
  13. 地籍数据属性质检功能设计与实现
  14. 破解qq上网限制 突破限制上QQ
  15. bat文件建文件夹时乱码及失败问题
  16. 轻量级数据格式 —— JSON
  17. 解决appium中Error: The port #8100 is occupied by an other process的问题
  18. Python制作绘图板,基础功能实现
  19. [每日一氵] mmSeg 报错 StopIteration
  20. PS一分钟打造手机渐变壁纸

热门文章

  1. 字节跳动客户端开发面经(一面)
  2. snow隐写-无字天书
  3. GUAVA本地缓存01_概述、优缺点、创建方式、回收机制、监听器、统计、异步锁定
  4. 暑假游玩五岳之中的泰山
  5. Maxthon:超级技巧五则(转)
  6. VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。未能将管道连接到虚拟机: 系统找不到指定的文件
  7. Web3D工程师(three.js)北京招聘
  8. Guacamole 配置开启 Radius 身份认证方式
  9. python个人信息管理系统登录注册增加日程_个人信息管理系统网站设计论文模板.docx...
  10. RTKLIB学习总结(七)GNSS观测量、Rinex文件读取