当前位置 : 主页 > 编程语言 > python >

Python 爬虫下载(爬取)笔趣阁小说下载

来源:互联网 收集:自由互联 发布时间:2022-09-02
一. 数据来源分析 1. 确定需求 爬取笔趣阁小说内容 (一本) 进行搜索功能 (当输入一本小说名字或者作者选择下载相应的小说内容) 2. 数据来源分析 二. 代码实现过程 1. 发送请求 对小说


 一. 数据来源分析

    1. 确定需求
        爬取笔趣阁小说内容 (一本)
        进行搜索功能 (当输入一本小说名字或者作者选择下载相应的小说内容)
    2. 数据来源分析

二. 代码实现过程

    1. 发送请求 对小说章节列表页发送请求
    2. 获取数据 获取网页源代码 (响应体的文本数据response.txt)
    3. 解析数据 提取小说名字 / url地址
    4. 发送请求 对小说章节url地址发送请求
    5. 获取数据 获取网页源代码 (响应体的文本数据response.txt)
    6. 解析数据 提取小说的内容 / 小说章节名
    7. 保存数据
    8. 实现一个搜索功能

三、环境介绍

    python 3.6 解释器
    pycharm 编辑器 专业版 是需要激活码
    
    requests >>> pip install requests
    parsel >>> pip install parsel
    pandas >>> pip install pandas
    tqdm >>> pip install tqdm


四、完整代码

import requests # pip install requests
import parsel # 数据解析 pip install parsel
import pandas as pd # pip install pandas
from tqdm import tqdm # pip install tqdm

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
}


def get_response(html_url):
'''发送请求'''
response = requests.get(url=html_url, headers=headers)
response.encoding = response.apparent_encoding
return response


def save(name, title, content):
"""保存小说"""
with open(name + '.txt', mode='a', encoding='utf-8') as f:
f.write(title)
f.write('\n')
f.write(content)
f.write('\n')
# print(title)


def get_novel_url(html_url):
"""获取小说章节url"""
response = get_response(html_url)
# 把获取到的html字符串数据 转成 selector 对象
selector = parsel.Selector(response.text)
name = selector.css('#info h1::text').get()
href = selector.css('#list dd a::attr(href)').getall()
# https://www.biquges.com/10_10770/6896120.html
href = ['https://www.biquges.com/' + i for i in href]
for index in tqdm(href):
"""获取小说的内容"""
response = get_response(index)
selector = parsel.Selector(response.text)
title = selector.css('.bookname h1::text').get()
# getall() 获取所有的标签内容 返回的是列表 get 获取一个 返回的是字符串
content_list = selector.css('#content::text').getall()
# 把列表转换成字符串
content = ''.join(content_list)
save(name, title, content)


if __name__ == '__main__':
# url = 'https://www.biquges.com/10_10770/index.html'
# get_novel_url(url)
# print(response.text)
while True:
print('输入0即可退出程序')
word = input('请输入你要下载的小说名字(作者): ')
if word == '0':
break
search_url = 'https://www.biquges.com/modules/article/search.php'
data = {
'searchkey': word,
'searchtype': 'articlename'
}
response_1 = requests.post(url=search_url, data=data, headers=headers)
response_1.encoding = response_1.apparent_encoding
selector_1 = parsel.Selector(response_1.text)
# 第一次提取
trs = selector_1.css('#nr')
lis = []
if trs:
for tr in trs:
novel_name = tr.css('td:nth-child(1) a::text').get()
novel_id = tr.css('td:nth-child(1) a::attr(href)').get().replace('/', '')
author = tr.css('td:nth-child(3)::text').get()
dit = {
'书名': novel_name,
'作者': author,
'书ID': novel_id,
}
lis.append(dit)
print(f'一共搜索到{len(lis)}数据内容')
search_result = pd.DataFrame(lis)
print(search_result)
num = input('请输入你要下载的小说序号: ')
# 序号对应的就是列表里面索引位置
num_id = lis[int(num)]['书ID'] # 直接获取小说ID
link_url = f'https://www.biquges.com/{num_id}/index.html'
get_novel_url(link_url)
print(f"{lis[int(num)]['书名']}已经下载完成了")
else:
print('抱歉,搜索没有结果^_^')

Python 爬虫下载(爬取)笔趣阁小说下载_数据

Python 爬虫下载(爬取)笔趣阁小说下载_数据_02

Python 爬虫下载(爬取)笔趣阁小说下载_数据_03



上一篇:Python 爬虫爬取当当网
下一篇:没有了
网友评论