爬虫初学(一):爬取笔趣阁小说(萌新用

您所在的位置:网站首页 趣看小说最新版本 爬虫初学(一):爬取笔趣阁小说(萌新用

爬虫初学(一):爬取笔趣阁小说(萌新用

2023-07-17 04:34| 来源: 网络整理| 查看: 265

不识有话说

作为一个爬虫萌新,第一个小项目当然是爬一爬我们的萌新之友-《新笔趣阁》 虽然没什么难度, 不过还是分享一下自己的代码历程, 希望能给予大家一些思路或帮助, 当然,如果有大佬能够指出错误或可以改进的地方, 那当然更好了, 等你呦~

项目展示

在讲解项目之前, 先给你们展示一下功能, 不然看了半天, 结果不是自己想要的那不是自闭了。 使用状态 在这里插入图片描述 在这里插入图片描述

说实话,感觉我挺憨的才能写出这种代码,谁下载小说不是一整本一整本下, 结果也就我傻大憨的一章一章下,甚至还觉得自己好牛,害

代码思路讲解

项目要用到的模块

import os from time import sleep import requests from lxml import etree

没有的话可以自行安装,虽然大部分小伙伴应该都知道,但还是说一下

pip/pip3 install 想要安装的模块名

模块安装好了接下来讲解代码了

import os from time import sleep import requests from lxml import etree # 新笔趣阁的全部小说界面链接,所有小说链接都在这里 url = 'http://www.xbiquge.la/xiaoshuodaquan/' # 请求头 headers = { 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" } # 向新笔趣阁发送get请求 all_book_r = requests.get(url, headers=headers) # 解析返回的HTML页面数据 all_book_html = etree.HTML(all_book_r.content.decode('utf-8'))

首先进入新笔趣阁全部小说页面 >>>点击进入 点击键盘右上方的f12键或者鼠标右键点击检查进入页面调试界面(右边白色部分), 接下来单击调试台左上角的选中按钮,先随便选中一篇小说, 点击后发现左边调试台中的html界面已经跳转到了我们选中的地方, 我们可以发现这是一个ul列表下的一个a标签,并且这个ul列表储存着所有小说的链接, 那这就好办了~ 在这里插入图片描述 我们通过Chrome的xpath插件获取到新笔趣阁所有小说的链接 没有的可以自己下载安装一下(强烈推荐,特别好用) 链接: https://pan.baidu.com/s/1_HzBzOp-vaWFkiuE2U9yFQ 提取码: sb7p xpath使用:这里是一个大佬的博客,不懂的可以看看 在这里插入图片描述 我们将可以正确获取到自己需要信息的代码放入到xpath方法中, xpath方法会将获取到的HTML页面里自己需要的所有信息放入到一个列表里, 这个列表也就是你设置的变量名

# 储存所有小说链接的列表 all_book_url = all_book_html.xpath('//div[@class="novellist"]/ul/li/a/@href') # 储存所有小说名的列表 all_book_title = all_book_html.xpath('//div[@class="novellist"]/ul/li/a/text()') print(all_book_url) # 下图

在这里插入图片描述 设置num值,每循环判断一次num值就+1,直到找到该小说,那么num值将作为上图列表的下标使用,获取到用户想要下载的小说的链接,进行该小说的数据获取

# 输入你想找的小说名 find_book = input('输入想下载的书名:') num = 0 # 通过for循环判断是否有用户想找的小说 for book_title in all_book_title: # 有则获取该小说你想要的数据 if find_book == book_title: print('找到了,您要的', book_title) # 找到该小说的链接 book_url = all_book_url[num] # 向小说页面发送请求 book_r = requests.get(book_url, headers=headers) # 解析 book_html = etree.HTML(book_r.content.decode('utf-8')) # 该小说的章节链接列表 book_url = book_html.xpath('//div[@id="list"]/dl/dd/a/@href') # 该小说的章节名列表 chapter_title = book_html.xpath('//div[@id="list"]/dl/dd/a/text()') # 循环一次下标加一 num += 1

为了防止下载的小说都装在一个文件夹里, 不仅混乱而且很难找到自己想看的小说章节(其实只要小说内容装在一起就不用这么麻烦,但是当时我妹想到)

# 判断该路径是否存在,存在则返回true,不存在则返回flase judge = os.path.exists('../小说/%s' % str(book_title)) # 判断judge是否为true,如果不是则创建该路径 if not judge: os.makedirs('../小说/%s' % str(book_title))

通过用户输入的值,将需要的章节链接循环取出,然后通过xpath获取小说文本内容

# 告诉用户小说有多少章节 print('' % len(chapter_title)) # 获取用户需要下载的章节 download_book_start = int(input('输入从第几章开始下载:')) download_book_end = int(input('输入到第几章结束:')) chapter_num = 0 # download_book_start - 1是因为列表下标是从0开始的 for book_content_url in book_url[download_book_start - 1:download_book_end]: # 防止获取太快get不到数据 sleep(2) new_book_content_url = 'http://www.xbiquge.la' + book_content_url book_content_r = requests.get(new_book_content_url, headers=headers) book_content_html = etree.HTML(book_content_r.content.decode('utf-8')) # 该章节小说内容列表 book_content = book_content_html.xpath('//div[@class="box_con"]/div[@id="content"]/text()')

将内容列表里的数据一个个循环出来存到all_content字符串中, 然后通过with open方法,写入到text文件里

with open('../小说/%s/%s.text' % (str(book_title), chapter_title[download_book_start + chapter_num -1]), 'w', encoding='utf-8') as write_content: # 用来储存小说内容的字符串 all_content = '' for content in book_content: all_content += content write_content.write(all_content) print(chapter_title[download_book_start + chapter_num -1], '--下载成功') # 用来获取小说章节名 chapter_num += 1 print('全部下载完成')

emmm,大概可能也许讲完了,应该讲的挺详细的, 萌新第一次写,如果有什么不足,可以提出来(勿喷),会慢慢改进的

完整代码 import os from time import sleep import requests from lxml import etree url = 'http://www.xbiquge.la/xiaoshuodaquan/' headers = { 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" } all_book_r = requests.get(url, headers=headers) all_book_html = etree.HTML(all_book_r.content.decode('utf-8')) all_book_url = all_book_html.xpath('//div[@class="novellist"]/ul/li/a/@href') all_book_title = all_book_html.xpath('//div[@class="novellist"]/ul/li/a/text()') print(all_book_url) find_book = input('输入想下载的书名:') num = 0 for book_title in all_book_title: if find_book == book_title: print('找到了,您要的', book_title) book_url = all_book_url[num] book_r = requests.get(book_url, headers=headers) book_html = etree.HTML(book_r.content.decode('utf-8')) book_url = book_html.xpath('//div[@id="list"]/dl/dd/a/@href') chapter_title = book_html.xpath('//div[@id="list"]/dl/dd/a/text()') judge = os.path.exists('../小说/%s' % str(book_title)) if not judge: os.makedirs('../小说/%s' % str(book_title)) print('' % len(chapter_title)) download_book_start = int(input('输入从第几章开始下载:')) download_book_end = int(input('输入到第几章结束:')) chapter_num = 0 for book_content_url in book_url[download_book_start - 1:download_book_end]: sleep(2) new_book_content_url = 'http://www.xbiquge.la' + book_content_url book_content_r = requests.get(new_book_content_url, headers=headers) book_content_html = etree.HTML(book_content_r.content.decode('utf-8')) book_content = book_content_html.xpath('//div[@class="box_con"]/div[@id="content"]/text()') with open('../小说/%s/%s.text' % (str(book_title), chapter_title[download_book_start + chapter_num -1]), 'w', encoding='utf-8') as write_content: all_content = '' for content in book_content: all_content += content write_content.write(all_content) print(chapter_title[download_book_start + chapter_num -1], '--下载成功') chapter_num += 1 print('全部下载完成') break elif num + 1 == len(all_book_title): print('查无此书') num += 1

`



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3