Python爬取豆瓣图书信息并写入Excel

豆瓣算是一个文艺者的栖息地了,也是程序员们的虫子喜欢光顾的地方。对豆瓣的书籍和电影比较感兴趣,下面是一个小爬虫抓取图书的然后自动写入Excel,后续可能会加大光顾豆瓣的力度。_

这个爬虫有参考网络上的资料,也有参考如下链接的文档。

Request官方文档
Openpyxl官方文档
BeautifulSoup4官方文档
XML 系列教程

网页的源代码情况.png
# -*- coding=utf-8 -*-
import requests
from bs4 import BeautifulSoup
#import os
from openpyxl import Workbook
import time

num0 = 1  # 用来计数,计算爬取的书一共有多少本
num1 = 1
num2 = 1 #设置三个计数的变量是为了将书籍、类别和作者对应起来

start_time = time.time()  # 计算爬虫爬取过程时间

# 第一页网页网址https://read.douban.com/columns/category/all?sort=hot&start=0
# 第二页网页网址https://read.douban.com/columns/category/all?sort=hot&start=10
# 第三页网页网址https://read.douban.com/columns/category/all?sort=hot&start=20
# ......发现规律了吗
url = 'https://read.douban.com/columns/category/all?sort=hot&start='

wb = Workbook()
ws = wb.active
ws.title = "豆瓣阅读全部专栏"
ws.cell(row=1, column=1).value = '全部专栏'
ws.cell(row=1, column=2).value = '作者'
ws.cell(row=1, column=3).value = '类别'

for i in range(0, 1760, 10):  # 这里的  range(初始,结束,间隔)
    # requests库用来向该网服务器发送请求,请求打开该网址链接。requests.get().content表示什么意思?
    html = requests.get('https://read.douban.com/columns/category/all?sort=hot&start=%d' % i).content
    # BeautifulSoup库解析获得的网页,第二个参数一定记住要写上‘lxml’,记住就行
    bsObj = BeautifulSoup(html, 'lxml')
    print('==============' + '第%d页' % (i / 10 + 1) + '==============')
    # 分析网页发现,每页有10本书,而<h4>标签正好只有10个。
    
    # 下面的for循环是爬取书籍名称
    h4_node_list = bsObj.find_all('h4')  # 这里返回的是h4标签的list列表。
    #对于为什么是find_all('h4'),以及下面的类似。都是查看页面源代码,然后找规律,参考BS4文档。
    for h4_node in h4_node_list:
    # 因为是列表,要用list[0]取出来<a>标签,在用<a>的string将文本取出来        
        title = h4_node.contents[0].string
        title = '<<' + title + '>>'
        #title_all = title_all.append(title)        
        print('第%d本书' % num0, title)
        num0 = num0 + 1
        ws.cell(row=num0, column=1).value = title
    
    # 下面的for循环是爬取对应书籍的类别
    category_node_list = bsObj.find_all("div","category")   
    for category_node in category_node_list:
        category = category_node.contents[1].string
        print('第%d本书的类别' % num1, category)
        num1 = num1 + 1
        ws.cell(row=num1, column=3).value = category

    # 下面的for循环是爬取对应书籍的作者
    author_node_list = bsObj.find_all("div","author")
    #category_node_list = bsObj.find_all("div","category")
    for author_node in author_node_list:
        author = author_node.contents[1].string
        print('第%d本书的作者' % num2, author)
        num2 = num2 + 1
        ws.cell(row=num2, column=2).value = author
       
    wb.save('豆瓣阅读全部专栏' + '.xlsx')  #将书籍写入Excel表格
        
    time.sleep(2)
    #设置抓数据停顿时间为1秒,防止过于频繁访问该网站,被封
 
#下面用来统计爬虫用时及抓取书籍总数。
end_time = time.time()
duration_time = end_time - start_time
print('运行时间共:%.2f' %duration_time + '秒')
print('共抓到%d本书名' % (num1-1))

代码如上,请大家多多指教。
另外,比较喜欢廖雪峰的Python教程,以及书籍《Python Cookbook》、《Learn Python the Hard Way》和爬虫书《Web Scraping with Python》,这本书中文名叫Python网络数据采集。其他的网路上的Python视频也很不错。有一个体会就是学一种技能的效果不在于你看多少本有关的书籍,而是一本书你是否完成看完了,吃透了多少。Python的资料就是太多了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • 爬虫文章 in 简书程序员专题: like:128-Python 爬取落网音乐 like:127-【图文详解】py...
    喜欢吃栗子阅读 21,631评论 4 412
  • 今天是清明节,早上带宝宝出去玩时,路过楼下的休闲亭,我不禁又看了一眼那靠路边的椅子,顿时思绪万千涌上心头,是啊,十...
    淘吧阅读 581评论 0 0
  • 实体化3属性:width height background boeder文字3属性:font-family fo...
    麦壳儿UIandFE2阅读 416评论 1 1
  • 丽霞,我不想隐瞒我现在的情况,你也感觉到了,我也不想一直这么让两个人都难受,我尝试过,努力过,但是我的心的确不在这...
    小伙子不孤单阅读 112评论 0 0