吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7147|回复: 37
收起左侧

[Python 原创] 笔趣阁小说爬虫下载

  [复制链接]
toxyf 发表于 2022-11-9 21:31
Python爬虫新手,第一个项目是笔趣阁小说下载,感觉有很多可以改正的地方,欢迎大佬批评。

[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import time

# 下载链接的前缀,‘944’是《剑来》的地址,想下载其他书可以查看原网页换地址
first_url = 'https://www.bqg99.com/book/944/'

basic_url = {
    'whole': None,
    'index': 1
}

custom_header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35'
}

# 下载好的小说
output = 'D:/Data/novel.txt'


# 更新网页链接
def update_link(url_dict):
    url_dict['whole'] = first_url + str(url_dict['index']) + '.html'
    url_dict['index'] = url_dict['index'] + 1
    print(url_dict['whole'])
    return url_dict


# 通过GET方法获取网页文本内容
def fetch_text(url_dict, request_header):
    data = requests.get(url=url_dict['whole'], headers=request_header, allow_redirects=False)
    print('status = %d' % data.status_code)
    if data.status_code == 302:
        return None
    else:
        data = BeautifulSoup(data.text, 'lxml')
        article = data.find(name='div', class_='content')
        chapter_topic = article.h1.text
        content_soup = article.find(name='div', id='chaptercontent', class_='Readarea ReadAjax_content')
        content_soup.p.decompose()	# 去掉多余的“上一章”、“下一章”的导航链接
        charter_words = content_soup.stripped_strings
        chapter = {
            'topic': chapter_topic,
            'content': charter_words
        }

        return chapter


def main():
    novel = open(file=output, mode='a+', encoding='utf8')

    link = update_link(basic_url)
    text = fetch_text(url_dict=link, request_header=custom_header)

    while text is not None:
        novel.write(text['topic'])
        novel.write('\n')
        for line in text['content']:
            line = line
            novel.write(line)
            novel.write('\n')
        novel.write('\n\n')
        time.sleep(1)	# 暂停1秒,防止服务器拒绝,不过这个网站好像没有反爬机制

        link = update_link(link)
        text = fetch_text(url_dict=link, request_header=custom_header)

    novel.close()


if __name__ == '__main__':
    main()








免费评分

参与人数 13吾爱币 +15 热心值 +11 收起 理由
yin5677 + 1 + 1 用心讨论,共获提升!
wuaijiaoyu + 1 + 1 我很赞同!
IMRE + 1 + 1 我很赞同!
jie0520 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zc252763152 + 1 我很赞同!
Mapping66 + 1 + 1 我很赞同!
syun4068 + 1 + 1 谢谢@Thanks!
hubohang + 1 我很赞同!
guangling + 1 谢谢@Thanks!
Xlinz02 + 1 谢谢@Thanks!
Q22358072 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
liudongssnh + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

konley 发表于 2022-11-9 23:39
用bs4+requests实现这样子的效果已经很不错啦~ 后面可以按这样子的思路慢慢完善:保存的小说名和路径不要写死→界面不美观加个进度条吧~→用lxml的xpath解析(更简洁)→selenium解决一些玄学问题→(协程)异步爬取→epub格式小说的制作(提取目录)等等
看了一遍代码 这里可以改一下 详情看注释:

[Python] 纯文本查看 复制代码
 novel.write(text['topic'])
        novel.write('\n')
        lines = list(text['content'])  # 将generator转为list 方便控制line
        for line in lines[:-1]:  # 每篇小说的倒数第一行是网站水印 不添加进txt
            novel.write(line)
            novel.write('\n')
        novel.write('\n\n')
lsy832 发表于 2022-11-9 22:01
kant101x 发表于 2022-11-9 23:58
airwenlee 发表于 2022-11-10 01:05
哪位帮忙做个阅读app的书源,这个网站不错
szs6008 发表于 2022-11-10 05:16
谢谢分享源码
tzlqjyx 发表于 2022-11-10 07:06
谢谢分享,后续可以在你这代码上修改
kooke2008 发表于 2022-11-10 08:30
很好的建议,我也喜欢看《剑来》,这个码真的好。
Wapj_Wolf 发表于 2022-11-10 08:37
我只是了为学习PY,绝对不是为了爬书。真的……
12394613643 发表于 2022-11-10 08:39
又得费眼了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 21:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表