吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1169|回复: 10
收起左侧

[学习记录] 初学python 爬取奇书网小说

[复制链接]
Pirates 发表于 2023-4-25 14:31
[Python] 纯文本查看 复制代码
"""
奇书网小说爬取
"""
import pinyin
import requests
import parsel
import os

NOVEL_CLASS = {'穿越', '言情', '都市', '百合', '历史', '同人', '武侠', '玄幻', '惊悚', '科幻', '网游', '哲学', '资料'}


def start(type_name='穿越'):
    print(f"开始爬取{type_name}小说")
    os.mkdir(f"{type_name}小说")
    for index in range(1, 2):
        url = 'http://www.vbiquge.co/xclass/' + pinyin.get(type_name, format='strip', delimiter="") + '/' + str(
            index)
        req = requests.get(url=url)
        req.encoding = 'utf-8'
        selector = parsel.Selector(req.text)
        a_href_list = selector.css('#fengtui > div > div > div.bookinfo > h4 > a::attr(href)').getall()
        for a in a_href_list:
            url_c = 'http://www.vbiquge.co' + a
            xiaoshuo = requests.get(url_c)
            xiaoshuo.encoding = 'utf-8'
            selector_2 = parsel.Selector(xiaoshuo.text)
            # 获取下载TXT按钮
            btn = selector_2.css('body > div.container > div.content > div:nth-child(2) > div.bookinfo > div > '
                                 'a:nth-child(3)::attr(href)').getall()
            download_url = f'http://www.vbiquge.co{btn[0]}'
            title = download_url.split('=')[-1] + '.txt'
            download = requests.get(download_url).content
            with open(f'{type_name}小说/{title}', mode='wb') as f:
                f.write(download)
            print(title, '下载完成')


if __name__ == '__main__':
    type_name = input("请输入你要爬取的小说类型:")
    if type_name not in NOVEL_CLASS:
        print('类型错误')
    start(type_name)
微信截图_20230425143122.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
daihao49 + 1 + 1 我很赞同!

查看全部评分

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

qqqwh 发表于 2023-4-25 16:29
下一看看
 楼主| Pirates 发表于 2023-4-25 16:55
又写了个爬取4k壁纸
[Python] 纯文本查看 复制代码
import random

from selenium import webdriver
import parsel
import requests


def start(index=0):
    browser = webdriver.Chrome()
    browser.set_window_size(1120, 550)
    browser.get(f'https://wallhaven.cc/search?q=id%3A65348&sorting=random&ref=fp&seed=iJJ0Sq&page={index}')
    selector = parsel.Selector(browser.page_source)
    a_href_list = selector.css('#thumbs > section > ul > li > figure > a::attr(href)').getall()  # 获取每个图片的url
    browser.quit()
    for url in a_href_list:
        res = requests.get(url=url)
        res.encoding = 'utf-8'
        tpselector = parsel.Selector(res.text)
        img_url = tpselector.css("#wallpaper::attr(src)").getall()
        # download = requests.get(url=img_url[0]).content
        download(img_url[0])


def download(url):
    print(f'开始下载图片{url}')
    title = url.split('/')[-1]
    download_file = requests.get(url).content
    with open(f'{title}', mode='wb') as f:
        f.write(download_file)
    print(title, '下载完成')


if __name__ == '__main__':
    for i in range(1, 85):
        print(f'开始下载第{i}页')
        start(i)
chenhuan001 发表于 2023-4-25 17:03
yifengzi 发表于 2023-4-25 17:49
想起来我的python从入门到放弃
 楼主| Pirates 发表于 2023-4-25 17:54
yifengzi 发表于 2023-4-25 17:49
想起来我的python从入门到放弃

我主业java 发现这个比java好玩多了哈哈哈
yang15363 发表于 2023-4-25 18:35
安装了pinyin还是出现 No module named ‘pinyin’”,不知咋回事。
wananlove 发表于 2023-4-25 20:29
可以,学习一下
ocpiww 发表于 2023-6-14 03:18
你的这段代码如果网络不稳定会出现报错,我让GPT优化了一下?感觉还不错。
有时候服务器响应较慢或不稳定,你可以尝试在请求之间添加一些延迟,并使用重试机制来处理连接问题。例如,使用 time.sleep() 函数添加延迟,并使用 try-except 块来捕获连接错误并进行重试。

import pinyin
import requests
import parsel
import os
import time

NOVEL_CLASS = {'穿越', '言情', '都市', '百合', '历史', '同人', '武侠', '玄幻', '惊悚', '科幻', '网游', '哲学', '资料'}

# 设置重试次数
max_retries = 3

# 设置延迟时间(单位:秒)
delay = 2


def start(type_name='穿越'):
    print(f"开始爬取{type_name}小说")
    os.mkdir(f"{type_name}小说")
    for index in range(1, 2):
        url = 'http://www.vbiquge.co/xclass/' + pinyin.get(type_name, format='strip', delimiter="") + '/' + str(index)
        req = requests.get(url=url)
        req.encoding = 'utf-8'
        selector = parsel.Selector(req.text)
        a_href_list = selector.css('#fengtui > div > div > div.bookinfo > h4 > a::attr(href)').getall()
        for a in a_href_list:
            url_c = 'http://www.vbiquge.co' + a
            retries = 0
            while retries < max_retries:
                try:
                    xiaoshuo = requests.get(url_c)
                    xiaoshuo.encoding = 'utf-8'
                    selector_2 = parsel.Selector(xiaoshuo.text)
                    # 获取下载TXT按钮
                    btn = selector_2.css(
                        'body > div.container > div.content > div:nth-child(2) > div.bookinfo > div > a:nth-child(3)::attr(href)').getall()
                    download_url = f'http://www.vbiquge.co{btn[0]}'
                    title = download_url.split('=')[-1] + '.txt'
                    download = requests.get(download_url).content
                    with open(f'{type_name}小说/{title}', mode='wb') as f:
                        f.write(download)
                    print(title, '下载完成')
                    # 请求成功,退出循环
                    break
                except requests.exceptions.ConnectionError:
                    print("连接错误,进行重试...")
                    retries += 1
                    time.sleep(delay)
            else:
                print("请求失败,达到最大重试次数。")


if __name__ == '__main__':
    type_name = input("请输入你要爬取的小说类型:")
    if type_name not in NOVEL_CLASS:
        print('类型错误')
    start(type_name)

忘記優慯 发表于 2023-6-20 13:01
学习Python 从入门到放弃,但是看到发了源码了,又想拿来运行一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 23:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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