科百科
当前位置: 首页 范文大全

python爬虫爬取小说内容(Python爬虫自学笔记爬取小说)

时间:2023-07-28 作者: 小编 阅读量: 5 栏目名: 范文大全

1功能及版本说明功能:爬取小说目录和章节内容,并将章节内容下载到本地txt文件中。版本:v1.1增加代理IP,实现小说完整下载。2开发环境开发环境:Python3和PyCharm;3网站介绍及分析以免费小说全文阅读网站为例,爬取该网站上面的小说。通过快捷键F12,可以调出当前网页的源码信息,分析相关源码。首先看小说目录页面,通过点击蓝色边框内的箭头,再点击左侧页面中要了解的信息,在右侧就会出现相关的源码信息。

1 功能及版本说明

功能:爬取小说目录和章节内容,并将章节内容下载到本地txt文件中。

版本:v1.1

增加代理IP,实现小说完整下载。

2 开发环境

开发环境:Python3和PyCharm;

3 网站介绍及分析

以免费小说全文阅读网站(http://www.quanwenyuedu.io/)为例,爬取该网站上面的小说。通过快捷键F12,可以调出当前网页的源码信息,分析相关源码。

首先看小说目录页面,通过点击蓝色边框内的箭头,再点击左侧页面中要了解的信息,在右侧就会出现相关的源码信息。

小说名称"遮天"对应的源码为:<h1>遮天</h1>;

小说作者"作者:辰东"对应的源码为:<p>"作者:"<span>辰东</span></p>;

小说章节信息对应的源码为:<li><a href="1.html">第1章 星空中的青铜巨棺</a></li>;

下面看章节内容页面,发现小说具体章节内容在代码<div>......</div>中。

4 编码思路

1) 提供小说目录页的url;

2) 爬取目录页面信息;

3) 提取目录页面中小说的名称、作者、具体章节的名称和网址信息;

4) 根据提取到的章节网址(一般为相对路径网址),结合目录页网址进行分析,合成绝对路径的章节网址;

5) 爬取小说章节网页内的正文内容,判断网站是否访问成功,若访问不成功则随机选取代理IP,继续访问;若访问成功,则将正文内容保存到本地txt文件中;

6) 循环小说章节网址,依次爬取下载保存到本地。

5 代码实现

代码分两个py文件,crawl_v1.1.py为爬取小说并下载的代码,proxy_ip.py为爬取代理IP的代码,具体如下:

完整代码如下:

crawl_v1.1.py

# 爬取小说 v1.1import requestsfrom bs4 import BeautifulSoupimport timeimport randomimport proxy_ipurl = "http://www.quanwenyuedu.io/n/zhetian/xiaoshuo.html"# 爬取url网址内容def get_url(url,proxies):headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0","Accept":"text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Accept-Encoding":"gzip, deflate, sdch","Accept-Language":"zh-CN,zh;q=0.8","Cache-Control":"max-age=0","Connection":"keep-alive"}r = requests.get(url,headers = headers,proxies = proxies)while r.status_code != 200:p = proxy_ip.get_random_ip()r = requests.get(url, headers=headers, proxies=p)return r# 获取小说名称和作者proxies_random = proxy_ip.get_random_ip()r = get_url(url,proxies_random)soup = BeautifulSoup(r.text,"html.parser")title = soup.h1.textauthor = soup.find_all("p")[1].text[3:]chapter_list = soup.find_all("li")for i in chapter_list:# 获取小说章节名称和网址i_url = i.a.get("href")chapter_url = url[:-13]i_urlchapter_name = i.text# 获取小说章节内容r = get_url(chapter_url,proxies_random)chapter_soup = BeautifulSoup(r.text,"html.parser")content = chapter_soup.find_all("p")# 将章节内容写入txt文件print(chapter_name"正在下载......")for c in content:with open(title"_"author".txt","a",encoding="utf-8") as f:f.write(c.text"\n")print(chapter_name"下载完成")

proxy_ip.py

# 爬取代理IPimport requestsfrom bs4 import BeautifulSoupimport randomurl = "https://www.xicidaili.com/nn"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0","Accept": "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Accept-Encoding": "gzip, deflate, sdch","Accept-Language": "zh-CN,zh;q=0.8","Cache-Control": "max-age=0","Connection": "keep-alive"}ip_list = []r = requests.get(url,headers = headers)soup = BeautifulSoup(r.text,"html.parser")# 提取ip相关的标签tr = soup.find_all("tr")tr = tr[1:]for i in tr:td = i.find_all("td")td_2 = td[1].texttd_3 = td[2].texttd_6 = td[5].textip = td_6"://"td_2":"td_3ip_list.append(ip)def get_random_ip():ip_random = random.choice(ip_list)i = ip_random.find(":")# 定位":",便于提取"http"或"https"proxy = {ip_random[:i]:ip_random}return proxy

代码运行效果如下:

6 代码问题汇总

1) 在代码调试阶段,出现如下错误:

UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 7: illegal multibyte sequence

经查询分析,write()函数的默认编码不是utf-8,在write()中设置utf-8编码:write("","a",encoding="utf-8");

2) 下载速度过慢;

3) 代码运行,小说下载到990章时停住了,运行没有结束,也没有给出错误代码,只是不再继续运行下去了;

原因分析:怀疑是内存不足,或者写入函数write()内存限制。

7 相关学习知识点

1) 列表追加元素:list.append[];

2) 随机选取列表中的元素:需要引入random库,调用random.choice()函数;

3) 其他py文件中函数的调用:在要引入的文件中定义函数def get_random_ip();在本文件中import py文件,并调用get_random_ip()函数;

4) While循环语句,判断网站访问是否成功;

8 结束语

本次代码解决了反爬虫访问限制的问题,但下载速度很慢,且在进行到990章时代码运行停止了,没有给出错误原因,需要进一步优化。

将此次编码的过程及源码分享给大家,供大家参考。对于错误的地方,或有更好的建议,希望大家提出来,不胜感激!

    推荐阅读
  • 扫黑风暴黄希为什么走(扫黑风暴黄希离开是怕自己的生命受到威胁)

    扫黑风暴黄希为什么走?扫黑风暴黄希为什么走《扫黑风暴》黄希走的原因是她没有勇气举报自己的小姨贺芸,也怕自己的生命受到威胁。不过离开之前,黄希把一些线索提供给她比较信任的林浩,当然,黄希并没有说出所有事情,她只透露了一件事,孙兴就是高赫。

  • 哪些人不能吃桃金娘(什么人不能吃桃金娘)

    哪些人不能吃桃金娘孕期尽量不要进食,以免对胎儿正常发育带来不良影响。经期禁用,月经期间女性身体较虚弱,建议应该慎重。桃金娘,别名:岗稔、山稔、多莲、当梨根、山旦仔、稔子树、豆稔。桃金娘为桃金娘科植物桃金娘的果实。果实长圆球形,一端稍尖,表面土黄色或暗绿褐色,质较硬,顶端有宿存萼片5枚及花柱残迹。内有种子多数,黄白色,扁平。味淡、微甜,气微香。以个大、干燥者为佳。有养血止血、涩肠固精的功效。

  • 中秋怎么发祝福(中秋节怎么发微信祝福)

    中秋怎么发祝福发给领导。一轮圆月挂天上,温馨祝福来奉上,幸福永在您脸上,祝愿您中秋佳节团团圆圆。走过忙忙碌碌的几十年,中秋佳节,愿您二老恩恩爱爱,和和美美,长长久久,永远团团圆圆。你是美丽的嫦娥,婀娜多姿,你是天上的月亮,万人仰望,你是星空中最美丽的星。月儿圆,人团圆,祝你早脱单,明年中秋节,成双成对过团圆节。月光吉祥照万家;幸福安康心情亮;合家欢,嫦娥传说流千年,月圆人圆永远大团圆。

  • 唐山限号扣分吗(唐山限号限行违章怎么处罚)

    下面希望有你要的答案,我们一起来看看吧!唐山限号扣分吗对于违反唐山限行规定的机动车,唐山交警会予以罚款100元、不记分的处罚,每天同一辆车间隔4小时以上处罚一次。处罚方式为电子警察和民警现场处罚相结合。限行时间:2019年10月07日至2020年01月05日,工作日07:00-20:00。限行区域、范围:遵化市:全市行政辖区范围内所有道路,包括城市(城区)道路和公路,高速公路除外。

  • 买手机小技巧(买手机攻略看了涨知识)

    小米Cisi系列:定位中端,主打女性市场,外观精美、自拍拍照很好,通常搭载中端处理器。vivoS系列:面向年轻时尚、潮流、偏女性的市场。主打人像拍摄,同时有不错的性能。IQOO数字系列:IQOO旗舰,性价比旗舰,和vivoX系列比通常削弱影像能力,通常vivoX系列砍一刀影像≈IQOO。IQOONeo系列:IQOONeo系列是IQOO数字系列的削弱版,一舰都是数字系列削弱摄像头、屏幕等配置后形成的。价格通常在1000到2000块。竞争对手主要是IQOO数字系列和小米数字系列。

  • 苹果系统更新好吗(苹果系统更新怎么样(快来看看吧)

    系统升级的好处:手机厂商之所以愿意花功夫为用户提供全新的系统升级,自然是因为系统升级能够给手机带来更好的体验一般来讲,苹果或者安卓手机厂商为用户进行新系统的推送往往会对手机的流畅性、稳定性等多方面进行优化,今天小编就来聊一聊关于苹果系统更新好吗?一般来讲,苹果或者安卓手机厂商为用户进行新系统的推送往往会对手机的流畅性、稳定性等多方面进行优化。

  • 强制猥亵侮辱罪会怎么判(网络语境下如何准确认定强制猥亵)

    广东省广州市越秀区人民检察院指控被告人区润生犯强制侮辱罪,向广州市越秀区人民法院提起公诉。辩护人提出区润生系强制猥亵未遂的意见不予采纳。区润生归案后能如实供述犯罪事实,依法可以从轻处罚。鉴于本案审理期间,区润生的家属主动替其赔偿被害人的损失,并取得被害人的谅解,可以酌情从轻处罚。一审宣判后,被告人区润生未提出上诉,检察机关亦未抗诉,判决已发生法律效力。

  • 寻龙诀剧情介绍详细(寻龙诀剧情是什么)

    寻龙诀剧情介绍详细剧情简介:20世纪80年代末,胡八一、王凯旋和Shirley杨在美国打算金盆洗手,本来叱咤风云的摸金校尉沦为街头小贩,被移民局追得满街跑。胡八一、王凯旋、Shirley杨决定再入草原千年古墓。《鬼吹灯之寻龙诀》根据天下霸唱所著盗墓小说《鬼吹灯》的后四部改编而成,由乌尔善执导,陈坤、黄渤、舒淇、杨颖、夏雨领衔主演的一部动作、悬疑电影。

  • 手机里这三个危险的设置一定要关(花1分钟设置一下手机吧)

    希望你们知道的越多越好来源:好奇博士