目录
前言
道路千万条,安全第一条
爬虫不谨慎,亲人两行泪
获取豆瓣小说分类界面的文本信息
一、老规矩,先上代码和结果
二、爬虫四步走
1.进行UA伪装
2.获取url
3.发送请求
4.获取响应数据进行解析并保存
前言
道路千万条,安全第一条
爬虫不谨慎,亲人两行泪
获取豆瓣小说分类界面的文本信息
一、老规矩,先上代码和结果
import requests
import fake_useragent
from lxml import etree
import timehead = {"User-Agent": fake_useragent.UserAgent().random # 随机生成一个User-Agent
}def pa():for j in range(0, 100, 20):time.sleep(3)url = f"https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start={j}&type=T"response = requests.get(url, headers=head)douban_text = response.texttree = etree.HTML(douban_text)li_novel = tree.xpath("//ul[@class='subject-list']/li") # 获取所有ul标签下的li标签内容for i in li_novel: # 遍历所获取的所有li标签novel_name = "".join(i.xpath("div[2]/h2/a/text()")).strip()novel_author_location_y_m = "".join(i.xpath("div[2]/div[1]/text()"))novel_score = "".join(i.xpath("div[2]/div/span[@class='rating_nums']/text()"))novel_num = "".join(i.xpath("div[2]/div/span[@class='pl']/text()"))new_novel_num = novel_num.strip()people = new_novel_num.strip('()')try:new_novel = novel_author_location_y_m.strip() # 去除爬出文本的左右空格result = new_novel.split('/') # 按'/'将文本分割novel_author = "/".join([i.strip() for i in result[0:len(result) - 3]])novel_location = result[len(result) - 3]novel_y = result[len(result) - 2]novel_m = result[len(result) - 1]except Exception as e:continueprint(novel_name, novel_author, novel_location, novel_y, novel_m, novel_score, people)novel.write(novel_name + '$' + novel_author + '$' + novel_location + '$' + novel_y + '$' + novel_m + '$' + novel_score + '$' + people + "\n")if __name__ == '__main__':novel = open("novel.txt", "w", encoding="utf8")pa()novel.close()pass
输出:
食南之徒$马伯庸$ 湖南文艺出版社 $ 2024-4-1 $ 56.00元$8.3$15038人评价
太白金星有点烦$马伯庸$ 湖南文艺出版社 $ 2023-6 $ 45.00$9.0$94115人评价
长安的荔枝$马伯庸$ 湖南文艺出版社 $ 2022-10 $ 45.00元$8.5$192930人评价
额尔古纳河右岸$迟子建$ 人民文学出版社 $ 2019-6-1 $ 32.00元$9.0$49364人评价
活着$余华$ 作家出版社 $ 2012-8 $ 20.00元$9.4$841459人评价
明亮的夜晚$[韩]崔恩荣/叶蕾$ 台海出版社 $ 2023-8 $ 52$9.0$26162人评价
绝叫$[日] 叶真中显/林佩瑾$ 北京联合出版公司 $ 2020-7 $ 58.00元$8.9$107828人评价
秋园$杨本芬$ 北京联合出版公司 $ 2020-6 $ 38.00元$9.0$112671人评价
最后一个死去的女孩$[美] 哈里·多兰/仲召明$ 北京联合出版公司 $ 2024-4-30 $ 69.00元$8.2$577人评价
十八岁出门远行$余华$ 江苏凤凰文艺出版社 $ 2024-3-7 $ 45元$7.4$6897人评价
钦探$周游$ 作家出版社 $ 2024-4 $ 68.00元$8.9$548人评价
暗处的女儿$[意大利] 埃莱娜·费兰特/陈英、王彦丁、黄语瞳$ 人民文学出版社 $ 2024-4 $ 45.00$9.0$1331人评价
许三观卖血记$余华$ 作家出版社 $ 2012-9 $ 24.00元$9.2$167659人评价
我们八月见$[哥伦比亚]加西亚·马尔克斯/侯健$ 南海出版公司 $ 2024-3-6 $ 39.00元$7.7$8315人评价
悉达多$[德] 赫尔曼·黑塞/姜乙$ 天津人民出版社 $ 2017-1 $ 32.00元$9.3$112094人评价
信任$[美] 埃尔南·迪亚斯/刘健$ 上海译文出版社 $ 2024-5 $ 79$8.3$491人评价
生死疲劳$莫言$ 浙江文艺出版社 $ 2022-1 $ 69.90$9.0$42629人评价
三体$刘慈欣$ 重庆出版社 $ 2008-1 $ 23.00$8.9$498359人评价
夜晚的潜水艇$陈春成$ 上海三联书店 $ 2020-9 $ 52.00元$8.3$73156人评价
献给阿尔吉侬的花束$[美] 丹尼尔·凯斯/陈澄和$ 广西师范大学出版社 $ 2015-4 $ 36.00元$9.1$111779人评价
一句顶一万句$刘震云$ 花城出版社 $ 2022-8 $ 68.00元$9.0$11504人评价
草民$蔡崇达$ 广州出版社 $ 2024-6 $ 59.8$8.4$1611人评价
卡拉马佐夫兄弟$[俄] 费奥多尔·陀思妥耶夫斯基/荣如德$ 上海译文出版社 $ 2015-2-1 $ CNY 78.00$9.6$35705人评价
恐怖呢喃$贵志祐介/徐建雄$ 文汇出版社 $ 2024-3 $ 59.90$7.4$1208人评价
窄门$[法] 安德烈·纪德/顾琪静$ 天津人民出版社 $ 2018-10 $ 45.00$7.6$30714人评价
流俗地$【马来西亚】黎紫书$ 北京十月文艺出版社 $ 2021-4-1 $ 55.00元$9.2$21472人评价
赎罪$[日] 凑佳苗/曹逸冰$ 北京日报出版社 $ 2024-5 $ 45.0元$6.9$1683人评价
消失的13级台阶$[日] 高野和明/赵建勋$ 上海文艺出版社 $ 2020-5-15 $ 42.00元$8.6$100842人评价
繁花$金宇澄$ 上海文艺出版社 $ 2013-3 $ 48.00元$8.6$42582人评价
联愁杀$[日] 西泽保彦/吴春燕$ 新星出版社 $ 2024-4 $ 52.00元$6.9$1054人评价
百年孤独$[哥伦比亚] 加西亚·马尔克斯/范晔$ 南海出版公司 $ 2011-6 $ 39.50元$9.3$429507人评价
涅朵奇卡$陀思妥耶夫斯基/于大卫$ 山东文艺出版社 $ 2023-9-1 $ 45.00元$8.6$7991人评价
宋慈洗冤笔记 3$巫童$ 四川文艺出版社 $ 2024-4 $ 58$7.9$1348人评价
霍乱时期的爱情$[哥伦比亚] 加西亚·马尔克斯/杨玲$ 南海出版公司 $ 2012-9-1 $ 39.50元$9.0$288390人评价
三体Ⅲ$刘慈欣$ 重庆出版社 $ 2010-11 $ 38.00元$9.2$284603人评价
变形记$[奥地利] 弗朗茨·卡夫卡/彤雅立$ 北京燕山出版社 $ 2020-1-1 $ 45.00$9.2$12358人评价
一句顶一万句$刘震云$ 长江文艺出版社 $ 2009-3 $ 29.80$8.8$85044人评价
唯余细节$[瑞典] 伊娅·根伯格/王梦达$ 南海出版公司 $ 2024-4 $ 49.00元$8.0$592人评价
人生海海$麦家$ 北京十月文艺出版社 $ 2019-4 $ 55.00元$8.0$93010人评价
我的天才女友$[意] 埃莱娜·费兰特/陈英$ 人民文学出版社 $ 2017-1 $ 42.00元$8.7$116785人评价
宋慈洗冤笔记 4$巫童$ 四川文艺出版社 $ 2024-7-1 $ 58.00元$7.3$1135人评价
三体Ⅱ$刘慈欣$ 重庆出版社 $ 2008-5 $ 32.00$9.3$303875人评价
动物农场$[英]乔治·奥威尔/荣如德$ 上海译文出版社 $ 2010-9 $ 22.00元$9.5$58018人评价
恶意$[日] 东野圭吾/娄美莲$ 南海出版公司 $ 2016-11 $ 39.50元$8.7$133176人评价
六个说谎的大学生$[日] 浅仓秋成/王星星$ 四川文艺出版社 $ 2023-4 $ 45.00元$7.7$17122人评价
她对此感到厌烦$妚鹤$ 北京联合出版公司 $ 2023-4 $ 54.80元$9.0$16050人评价
隐墙$[奥]玛尔伦·豪斯霍费尔/钟皓楠$ 北京联合出版公司 $ 2024-3 $ 52.00元$8.9$542人评价
白夜行$[日] 东野圭吾/刘姿君$ 南海出版公司 $ 2013-1-1 $ 39.50元$9.2$480143人评价
命运$蔡崇达$ 浙江文艺出版社、广州出版社 $ 2022-9-5 $ 59.80元$8.9$27975人评价
在细雨中呼喊$余华$ 作家出版社 $ 2012-11-1 $ 25.00元$8.8$75211人评价
第七重解答$[法] 保罗·霍尔特/朱寒依$ 文汇出版社 $ 2024-4-30 $ 45.00元$7.5$1115人评价
失明症漫记$[葡] 若泽·萨拉马戈/范维信$ 河南文艺出版社 $ 2022-8 $ 66$9.1$17272人评价
杀死一只知更鸟$[美] 哈珀·李/李育超$ 译林出版社 $ 2017-2 $ 58.00$9.3$72008人评价
遥远的救世主$豆豆$ 作家出版社 $ 2005-05-01 $ 28.00$8.6$46005人评价
红楼梦$[清] 曹雪芹 著、高鹗$ 人民文学出版社 $ 1996-12 $ 59.70元$9.6$427229人评价
失去的过去与未来的犯罪$[日] 小林泰三/曹逸冰$ 湖南文艺出版社 $ 2024-3 $ 49.80$8.1$785人评价
平面国$[英] 埃德温·A.艾勃特/鲁冬旭$ 上海文化出版社 $ 2020-8 $ 39.80元$9.2$22234人评价
13 67$陳浩基$ 皇冠文化出版有限公司 $ 2014-6-9 $ NT$350$9.1$22634人评价
鹿隐之野$押沙龙$ 万卷出版公司 $ 2024-6-17 $ 49.80$8.4$311人评价
猛虎下山$李修文$ 人民文学出版社 $ 2024-4 $ 58$8.0$392人评价
不理想的妻子$王欣$ 人民文学出版社 $ 2024-4 $ 49.8$7.8$881人评价
追风筝的人$[美] 卡勒德·胡赛尼/李继宏$ 上海人民出版社 $ 2006-5 $ 29.00元$8.9$798087人评价
佐丽$[美]莱尔德·亨特/于是$ 广西师范大学出版社 $ 2024-3 $ 49$8.7$806人评价
两京十五日$马伯庸$ 湖南文艺出版社 $ 2020-7 $ 108.00元$8.1$27702人评价
焦虑的人$弗雷德里克·巴克曼/孙璐$ 天津人民出版社 $ 2021-8 $ 49.8$8.4$16494人评价
费可的晚宴$珞珈$ 2022-11-1$珞珈 $ 2022-11-1$6.0$608人评价
明明不是我!$[日] 浅仓秋成/丁丁虫$ 广东旅游出版社 $ 2024-5-25 $ 59.00$7.0$461人评价
罗杰疑案$[英] 阿加莎·克里斯蒂/常禾$ 新星出版社 $ 2013-3 $ 28.00元$9.2$76671人评价
伊甸之东$[美]约翰·斯坦贝克/王一凡$ 湖南文艺出版社 $ 2024-5 $ 148.00元$9.4$168人评价
声音$【意】达契亚·玛拉依尼/陈英、徐赓薪$ 北京联合出版公司 $ 2024-4-1 $ 59.00元$8.3$146人评价
局外人$[法] 阿尔贝·加缪/柳鸣九$ 上海译文出版社 $ 2010-8 $ 22.00元$9.1$243119人评价
1984$[英] 乔治·奥威尔/刘绍铭$ 北京十月文艺出版社 $ 2010-4-1 $ 28.00$9.4$287245人评价
尘埃落定$阿来$ 浙江文艺出版社 $ 2020-10 $ 49.00元$8.8$11363人评价
驽马$[英] 米克·赫伦/郑雁$ 新星出版社 $ 2024-4 $ 79.00元$8.2$333人评价
第七天$余华$ 新星出版社 $ 2018-8 $ 39.5$8.2$51532人评价
西线无战事$[德] 埃里希·玛丽亚·雷马克/姜乙$ 上海文艺出版社 $ 2021-1 $ 49$9.4$21189人评价
大明王朝1566$刘和平$ 花城出版社 $ 2016-7 $ 88.00元$9.5$12537人评价
房思琪的初恋乐园$林奕含$ 北京联合出版公司 $ 2018-2 $ 45.00元$9.2$383544人评价
龙与地下铁$马伯庸$ 湖南文艺出版社 $ 2024-1 $ 49.80元$7.3$1897人评价
长日将尽$[英] 石黑一雄/冯涛$ 上海译文出版社 $ 2018-5 $ 48$8.9$37949人评价
嫌疑人X的献身$[日] 东野圭吾/刘子倩$ 南海出版公司 $ 2008-9 $ 28.00$8.9$526967人评价
宋慈洗冤笔记$巫童$ 四川文艺出版社 $ 2023-10-1 $ 58.00$7.9$5015人评价
克莱因壶$[日] 冈岛二人/张舟$ 化学工业出版社 $ 2019-9 $ 48.00元$8.9$69197人评价
沧浪之水$阎真$ 人民文学出版社 $ 2001-10 $ 26.00元$8.4$32694人评价
一个人消失在世上$[意] 亚历山德罗·巴里科/陈英$ 湖南文艺出版社 $ 2024-4 $ 68$8.5$197人评价
边城$沈从文、黄永玉 卓雅 插图.$ 北岳文艺出版社 $ 2002-4 $ 12.00元$8.7$231766人评价
云边有个小卖部$张嘉佳$ 湖南文艺出版社 $ 2018-7 $ 42.00元$7.4$89171人评价
豆子芝麻茶$杨本芬$ 广东人民出版社 $ 2023-10 $ 39.8$8.6$17323人评价
兄弟$余华$ 作家出版社 $ 2012-9-1 $ 43.00元$8.5$79795人评价
外面是夏天$[韩]金爱烂/徐丽红$ 人民文学出版社 $ 2022-10-15 $ 45.00元$8.7$5427人评价
圣母$[日] 秋吉理香子/郑晓蕾$ 新星出版社 $ 2019-3 $ 42.00$8.1$54625人评价
车上的女儿$[日] 宇佐见铃/千早$ 浙江人民出版社 $ 2024-4 $ 56.00元$7.5$540人评价
吾乡有情人$$舍目斯 $ 天地出版社 $ 2024-3$7.6$655人评价
树上的男爵$[意大利]伊塔洛·卡尔维诺/吴正仪$ 译林出版社 $ 2012-4-1 $ 30.00元$9.1$61523人评价
鼠疫$[法] 阿尔贝·加缪/刘方$ 上海译文出版社 $ 2013-8 $ 34.00元$9.1$80944人评价
献给阿尔吉侬的花束$[美] 丹尼尔·凯斯/陈澄和$ 河南文艺出版社 $ 2022-8 $ 48.00元$9.2$22335人评价
无望的逃离$[俄]尤里·波利亚科夫/张建华$ 上海三联书店 $ 2024-5 $ 98.00元$9.0$84人评价
人形爱情故事$[英]珍妮特·温特森/杨扬$ 新星出版社 $ 2024-6 $ 69.00元$8.1$138人评价
疼痛部$[荷] 杜布拉夫卡·乌格雷西奇/姜昊骞$ 北京日报出版社 $ 2023-5 $ 54.00元$8.7$6435人评价
哈利·波特$J.K.罗琳 (J.K.Rowling)/苏农、马爱农、马爱新$ 人民文学出版社 $ 2008-12-1 $ 498.00元$9.7$109501人评价
别看代码很长,但是解析起来不难,加油。
二、爬虫四步走
1.进行UA伪装
这一次的伪装跟上一次有点不一样,因为这次使用了fake_useragent库,可以用来随机生成一个User-Agent
head = {"User-Agent": fake_useragent.UserAgent().random # 随机生成一个User-Agent
}
按win+r打开命令提示符,输入cmd ,再输入 pip install fake_useragent去安装这个库。
如果pip没有换源的话可以移步我爬虫的第一篇文章看一下:
python-快速上手爬虫-CSDN博客
不能安装的要是安装完之后,pycharm里没显示的话,可以重启pycharm试一下。
2.获取url
按f12进入检查界面,复制右边的请求URl后面的内容即可
3.发送请求
response = requests.get(url, headers=head)
依然是get请求
4.获取响应数据进行解析并保存
这是东西最多,也最麻烦的一步
在这次解析数据中使用到了lxml库, 按win+r打开命令提示符,输入cmd ,再输入 pip install lxml去安装这个库。这个库可以用来解析和操作 XML 和 HTML 文档。我们这里使用的就是html类型。Content-Type后面显示的即是内容类型。
etree.HTML()
函数接受一个 HTML 字符串作为输入,返回一个 lxml Element 对象的根节点。这个 Element 对象可以通过 lxml 提供的方法和属性来进行操作,例如查找特定元素、修改元素内容、遍历文档结构等。
然后使用.xpath()方法获取标签里的内容,并且xpath返回的是一个列表。
- / 标识一个层级
- // 标识多个层级 属性定位 attr = class id
可以使用右击想查看的内容,再点检查,这样即可直接显示你所要查看的内容在哪个标签下。
可以看到,书本的信息都在一个一个li标签下,而所有的li标签又在ul标签下。那我们只需遍历ul标签下的每个li标签即可。再去单个li标签之内取单本书的各种内容。这是代码实现的思路。
接下来就是获取书本的每一个内容
但要注意,在同一个大标签下若有多个相同的小标签,用小标签名[数字]的方式表示是第几个小标签,数字从1开始;也可以使用标签里的class属性来表示是第几个标签,但是使用属性表示的话,属性必须是唯一的。
用jion方法将xpath获取的列表转换成字符串
for i in li_novel: # 遍历所获取的所有li标签novel_name = "".join(i.xpath("div[2]/h2/a/text()")).strip() novel_author_location_y_m = "".join(i.xpath("div[2]/div[1]/text()"))novel_score = "".join(i.xpath("div[2]/div/span[@class='rating_nums']/text()"))novel_num = "".join(i.xpath("div[2]/div/span[@class='pl']/text()"))new_novel_num = novel_num.strip()people = new_novel_num.strip('()')
对于这种 马伯庸 / 湖南文艺出版社 / 2024-4-1 / 56.00元 长数据,获取到的字符串可能格式很奇怪例如这个可能是这样的。
"""马伯庸 / 湖南文艺出版社 / 2024-4-1 / 56.00元"""
所以一般要对获取到的字符串进行格式化操作,在进行切片,将里面的内容分类取出来。
try里是字符串格式化和切分的操作,因为不是所有的书都是这样子,所以要加个try-except语句使代码运行不中断。
try:new_novel = novel_author_location_y_m.strip() # 去除爬出文本的左右空格result = new_novel.split('/') # 按'/'将文本分割novel_author = "/".join([i.strip() for i in result[0:len(result) - 3]])novel_location = result[len(result) - 3]novel_y = result[len(result) - 2]novel_m = result[len(result) - 1]
except Exception as e:continue
细心的同学可能会发现这次的url也有点不一样,加了个for循环。因为这次获取信息需要进行翻页操作,接着获取下一页的内容。那么网页的url也会进行改变,但有一些规律,所以可以写个循环去获取每一次网页的url。用time.sleep(3)是为了模仿用户点击翻页所需的时间。
而豆瓣的变化就是每次start=的数字增加20,从0开始。写个循环改变url,这样即可实现获取多页的信息。
for j in range(0, 100, 20):time.sleep(3)url = f"https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start={j}&type=T"
最后,可以将所获得信息全写进文件里保存起来。
novel = open("novel.txt", "w", encoding="utf8")