您现在的位置是:首页 > 文章详情

Python爬虫(一)——豆瓣下图书信息

日期:2018-06-22点击:489

爬虫目的:
随着近年互联网的发展,网络上的信息飞速数量增长。在庞大的数据面前想要获得
期望的信息往往如同大海捞针。通过合理的筛选,在百万甚至数亿计的数据中找到所需
信息,无疑有着非常大的意义。
在豆瓣网下,有很多与日常生活相关的模块网站

内置的评分评价功能可以为用户提供很大选择空间,以豆瓣读书为例:

 

其中包含六个大型模块(文学,流行,文化,生活,经管,科技),内部细分了145个小型模块。
在以数十万计的图书信息中,找到各模块中热门好评图书,对于读者或是书商都是很重要的。


爬虫代码概述

一.数据存储

csv文件存储,为方便后继使用pandas进行分析,对于爬取的html文件使用BeautifulSoup进行解析
字段选择为 : 书名(titles) 作者/出版社(authors) 评分(nums) 评论数(peoples)

 

1 csvinfo = open(name + '.csv', 'ab') 2 begcsv = csv.writer(csvinfo) 3 begcsv.writerow(['titles', 'authors', 'nums', 'peoples']) 4 csvinfo.close()

 

二.网页解析

html中书名(titles) 作者/出版社(authors) 评分(nums) 评论数(peoples)等字段对应selector分别为:

#subject_list > ul > li > div.info > h2 > a

#subject_list > ul > li > div.info > div.pub

#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums

#subject_list > ul > li > div.info > div.star.clearfix > span.pl

解析代码如下 : 
 1 # 爬取指定name模块的url,并存储至name.csv文件  2 def web(url, name):  3 db_data = requests.get(url, headers=header)  4 soup = BeautifulSoup(db_data.text, 'lxml')  5 titles = soup.select('#subject_list > ul > li > div.info > h2 > a')  6 authors = soup.select('#subject_list > ul > li > div.info > div.pub')  7 nums = soup.select('#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums')  8 peoples = soup.select('#subject_list > ul > li > div.info > div.star.clearfix > span.pl')  9 10 for title, author, num, people in zip(titles, authors, nums, peoples): 11 data = [ 12  ( 13 title.get('title'), 14 author.get_text().replace(' ', '').replace("\n", ""), 15 num.get_text().replace(' ', '').replace("\n", ""), 16 people.get_text().replace(' ', '').replace("\n", "") 17  ) 18  ] 19 csvfile = open(name + '.csv', 'ab') 20 writer = csv.writer(csvfile) 21 print(data) 22  writer.writerows(data) 23 csvfile.close()
 
 

三.请求头设置

1 header = { 2 'Accept': '*/*;', 3 'Connection': 'keep-alive', 4 'Accept-Language': 'zh-CN,zh;q=0.9', 5 'Accept-Encoding': 'gzip, deflate, br', 6 'Host': 'book.douban.com', 7 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36' 8 }

 

四.图书分页

在豆瓣的反爬虫机制中,正常人浏览习惯只会查看靠前的页码,而位于后面的一般不会查看,

所以豆瓣将50页之后的书籍信息设置为只能通过搜索查询,在分页中无法查看。url规则为每页加20,get请求,所以在确定标签后,可以修改start值来换页。

   

 

 

代码:
1 # name模块标签分页 指定为前50页 2 def setCsv(name): 3 url = 'https://book.douban.com/tag/' + name 4 urls = [('https://book.douban.com/tag/' + name + '?start={}&type=T').format(str(i)) for i in range(20, 980, 20)] 5 info(name=name) 6  web(url, name) 7 for single_url in urls: 8 print(single_url) 9 web(single_url, name=name)
 
 

五.完整代码

 1 # -*- coding: utf-8 -*-  2 from bs4 import BeautifulSoup  3 import requests  4 import csv  5 import sys  6  7 reload(sys)  8 sys.setdefaultencoding('utf-8')  9 10 # 请求头设置 11 header = { 12 'Accept': '*/*;', 13 'Connection': 'keep-alive', 14 'Accept-Language': 'zh-CN,zh;q=0.9', 15 'Accept-Encoding': 'gzip, deflate, br', 16 'Host': 'book.douban.com', 17 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36' 18 } 19 20 21 # 初始化csv文件 22 def info(name): 23 csvinfo = open(name + '.csv', 'ab') 24 begcsv = csv.writer(csvinfo) 25 begcsv.writerow(['titles', 'authors', 'nums', 'peoples']) 26  csvinfo.close() 27 28 29 # 爬取指定name模块的url,并存储至name.csv文件 30 def web(url, name): 31 db_data = requests.get(url, headers=header) 32 soup = BeautifulSoup(db_data.text, 'lxml') 33 titles = soup.select('#subject_list > ul > li > div.info > h2 > a') 34 authors = soup.select('#subject_list > ul > li > div.info > div.pub') 35 nums = soup.select('#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums') 36 peoples = soup.select('#subject_list > ul > li > div.info > div.star.clearfix > span.pl') 37 38 for title, author, num, people in zip(titles, authors, nums, peoples): 39 data = [ 40  ( 41 title.get('title'), 42 author.get_text().replace(' ', '').replace("\n", ""), 43 num.get_text().replace(' ', '').replace("\n", ""), 44 people.get_text().replace(' ', '').replace("\n", "") 45  ) 46  ] 47 csvfile = open(name + '.csv', 'ab') 48 writer = csv.writer(csvfile) 49 print(data) 50  writer.writerows(data) 51  csvfile.close() 52 53 54 # name模块标签分页 指定为前50页 55 def setCsv(name): 56 url = 'https://book.douban.com/tag/' + name 57 urls = [('https://book.douban.com/tag/' + name + '?start={}&type=T').format(str(i)) for i in range(20, 980, 20)] 58 info(name=name) 59  web(url, name) 60 for single_url in urls: 61 print(single_url) 62 web(single_url, name=name) 63 64 65 if __name__ == '__main__': 66 setCsv(str) #str为标签名

 

六.数据结果

 

 

 1 wber@wber:~/桌面$ tree -h 数据  2 数据  3 ├── [4.0K] 经管  4 │   ├── [ 41K] 策划.csv  5 │   ├── [ 79K] 创业.csv  6 │   ├── [ 70K] 股票.csv  7 │   ├── [ 98K] 管理.csv  8 │   ├── [ 67K] 广告.csv  9 │   ├── [ 90K] 金融.csv  10 │   ├── [ 95K] 经济学.csv  11 │   ├── [ 79K] 理财.csv  12 │   ├── [ 43K] 企业史.csv  13 │   ├── [ 94K] 商业.csv  14 │   ├── [ 89K] 投资.csv  15 │   └── [ 86K] 营销.csv  16 ├── [4.0K] 科技  17 │   ├── [ 19K] UCD.csv  18 │   ├── [ 21K] UE.csv  19 │   ├── [ 64K] web.csv  20 │   ├── [ 92K] 编程.csv  21 │   ├── [ 43K] 程序.csv  22 │   ├── [ 89K] 互联网.csv  23 │   ├── [ 33K] 交互.csv  24 │   ├── [ 64K] 交互设计.csv  25 │   ├── [ 66K] 科技.csv  26 │   ├── [100K] 科普.csv  27 │   ├── [ 99K] 科学.csv  28 │   ├── [5.8K] 神经网络.csv  29 │   ├── [ 48K] 算法.csv  30 │   ├── [ 20K] 通信.csv  31 │   └── [ 65K] 用户体验.csv  32 ├── [4.0K] 流行  33 │   ├── [ 23K] J.K.罗琳.csv  34 │   ├── [ 67K] 阿加莎·克里斯蒂.csv  35 │   ├── [ 37K] 安妮宝贝.csv  36 │   ├── [ 18K] 沧月.csv  37 │   ├── [ 81K] 穿越.csv  38 │   ├── [ 75K] 耽美.csv  39 │   ├── [ 76K] 东野圭吾.csv  40 │   ├── [ 21K] 高木直子.csv  41 │   ├── [ 37K] 古龙.csv  42 │   ├── [ 22K] 郭敬明.csv  43 │   ├── [ 50K] 韩寒.csv  44 │   ├── [106K] 绘本.csv  45 │   ├── [ 40K] 几米.csv  46 │   ├── [ 49K] 金庸.csv  47 │   ├── [ 99K] 科幻.csv  48 │   ├── [ 97K] 科幻小说.csv  49 │   ├── [ 19K] 落落.csv  50 │   ├── [ 98K] 漫画.csv  51 │   ├── [ 91K] 魔幻.csv  52 │   ├── [ 98K] 奇幻.csv  53 │   ├── [ 90K] 青春.csv  54 │   ├── [ 85K] 青春文学.csv  55 │   ├── [ 86K] 日本漫画.csv  56 │   ├── [ 65K] 三毛.csv  57 │   ├── [ 96K] 推理.csv  58 │   ├── [ 97K] 推理小说.csv  59 │   ├── [ 83K] 网络小说.csv  60 │   ├── [ 76K] 武侠.csv  61 │   ├── [ 46K] 校园.csv  62 │   ├── [ 94K] 悬疑.csv  63 │   ├── [ 84K] 言情.csv  64 │   ├── [ 62K] 亦舒.csv  65 │   ├── [ 80K] 张小娴.csv  66 │   └── [ 14K] 张悦然.csv  67 ├── [4.0K] 生活  68 │   ├── [ 82K] 爱情.csv  69 │   ├── [ 93K] 成长.csv  70 │   ├── [ 49K] 家居.csv  71 │   ├── [ 80K] 健康.csv  72 │   ├── [ 93K] 教育.csv  73 │   ├── [ 88K] 励志.csv  74 │   ├── [ 70K] 两性.csv  75 │   ├── [ 89K] 灵修.csv  76 │   ├── [ 85K] 旅行.csv  77 │   ├── [ 82K] 美食.csv  78 │   ├── [ 85K] 女性.csv  79 │   ├── [ 83K] 情感.csv  80 │   ├── [ 58K] 人际关系.csv  81 │   ├── [ 85K] 摄影.csv  82 │   ├── [ 89K] 生活.csv  83 │   ├── [ 67K] 手工.csv  84 │   ├── [100K] 心理.csv  85 │   ├── [ 64K] 养生.csv  86 │   ├── [ 80K] 游记.csv  87 │   ├── [ 86K] 职场.csv  88 │   └── [ 21K] 自助游.csv  89 ├── [4.0K] 文化  90 │   ├── [ 93K] 传记.csv  91 │   ├── [ 94K] 电影.csv  92 │   ├── [ 77K] 二战.csv  93 │   ├── [ 69K] 佛教.csv  94 │   ├── [ 76K] 国学.csv  95 │   ├── [ 78K] 回忆录.csv  96 │   ├── [ 88K] 绘画.csv  97 │   ├── [ 86K] 建筑.csv  98 │   ├── [ 75K] 近代史.csv  99 │   ├── [ 76K] 军事.csv 100 │   ├── [ 61K] 考古.csv 101 │   ├── [ 91K] 历史.csv 102 │   ├── [ 82K] 美术.csv 103 │   ├── [ 89K] 人文.csv 104 │   ├── [ 85K] 人物传记.csv 105 │   ├── [ 91K] 社会.csv 106 │   ├── [ 93K] 社会学.csv 107 │   ├── [ 90K] 设计.csv 108 │   ├── [ 84K] 数学.csv 109 │   ├── [ 90K] 思想.csv 110 │   ├── [ 89K] 文化.csv 111 │   ├── [ 90K] 西方哲学.csv 112 │   ├── [ 79K] 戏剧.csv 113 │   ├── [102K] 心理学.csv 114 │   ├── [ 96K] 艺术.csv 115 │   ├── [ 82K] 艺术史.csv 116 │   ├── [ 82K] 音乐.csv 117 │   ├── [ 95K] 哲学.csv 118 │   ├── [ 90K] 政治.csv 119 │   ├── [ 89K] 政治学.csv 120 │   ├── [ 80K] 中国历史.csv 121 │   ├── [ 67K] 自由主义.csv 122 │   └── [ 86K] 宗教.csv 123 └── [4.0K] 文学 124  ├── [ 32K] 茨威格.csv 125  ├── [ 66K] 村上春树.csv 126  ├── [ 67K] 当代文学.csv 127  ├── [ 19K] 杜拉斯.csv 128  ├── [ 89K] 儿童文学.csv 129  ├── [ 24K] 港台.csv 130  ├── [ 76K] 古典文学.csv 131  ├── [ 92K] 经典.csv 132  ├── [ 40K] 鲁迅.csv 133  ├── [ 16K] 米兰·昆德拉.csv 134  ├── [ 84K] 名著.csv 135  ├── [ 23K] 钱钟书.csv 136  ├── [ 87K] 日本文学.csv 137  ├── [ 75K] 散文.csv 138  ├── [ 76K] 诗词.csv 139  ├── [ 87K] 诗歌.csv 140  ├── [ 79K] 随笔.csv 141  ├── [ 91K] 童话.csv 142  ├── [ 79K] 外国名著.csv 143  ├── [ 99K] 外国文学.csv 144  ├── [ 61K] 王小波.csv 145  ├── [ 89K] 文学.csv 146  ├── [ 88K] 小说.csv 147  ├── [ 31K] 余华.csv 148  ├── [ 73K] 杂文.csv 149  ├── [ 60K] 张爱玲.csv 150  └── [ 71K] 中国文学.csv 151 152 6 directories, 142 files

 

 

 

 
原文链接:https://yq.aliyun.com/articles/604882
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章