笔趣阁小说爬取
本文最后更新于54 天前,其中的信息可能已经过时,如有错误请发送邮件到aing117@163.com

re正则表达式

"""
1.发送请求, 模拟浏览器对于url地址发送请求
    请求链接
"""

# 导入数据请求模块
import requests

# 导入正则表达式模块
import re
# 自定义变量名url 请求链接
url = 'https://www.bige3.cc/book/66/1.html'
# 模拟浏览器 headers 请求头
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}

# 发送请求
response = requests.get(url=url, headers=headers)
# 自定义response作为变量名接收request模块下的get方法

print(response)   # <Response [200]>表示请求成功

"""
2.获取数据, 获取服务器返回响应数据内容
    开发者工具:response
    response.text --> 获取响应文本数据<网页源代码/html字符串数据>
    
    re正则表达式:是直接对于字符串数据进行解析
    re.findall('什么数据', '什么地方') --> 从什么地方,去找什么数据
    .*? --> 可以匹配除\n换行符以外的任意数据
    css选择器:根据标签属性提取数据
    xpath节点提取:提取标签节点提取数据
"""

# 自定义变量名title 提取标题
title = re.findall('<h1 class="wap_none">(.*?)</h1>', response.text)[0]
# <h1 class="wap_none">第1章 论坛里的故事。</h1>中标题用(),然后用.*?代替,response.text中的任意一个标题
# 返回的结果是列表,[0]直接取值
print(response.text)
# 自定义变量名conten 提取内容
content = re.findall('<div id="chaptercontent" class="Readarea ReadAjax_content">(.*?)请收藏本站:https://www.bige3.cc。笔趣阁手机版:https://m.bige3.cc', response.text, re.S)[0].replace('<br /><br />\u3000\u3000', '\n')
# 将<br /><br />\u3000\u3000用replace替换为换行
print(content)

with open(title + '.txt', mode='a', encoding='utf-8') as f:

    # 写入内容
    f.write(title)
    f.write('\n')
    f.write(content)
    f.write('\n')

css选择器

"""
1.发送请求, 模拟浏览器对于url地址发送请求
    请求链接
"""

# 导入数据请求模块
import requests

# 导入数据解析模块
import parsel

# 自定义变量名url 请求链接
url = 'https://www.bige3.cc/book/66/1.html'
# 模拟浏览器 headers 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}

# 发送请求
response = requests.get(url=url, headers=headers)
# 自定义response作为变量名接收request模块下的get方法

print(response)  # <Response [200]>表示请求成功

"""
2.获取数据, 获取服务器返回响应数据内容
    开发者工具:response
    response.text --> 获取响应文本数据<网页源代码/html字符串数据>

    re正则表达式:是直接对于字符串数据进行解析
    re.findall('什么数据', '什么地方') --> 从什么地方,去找什么数据
    .*? --> 可以匹配除\n换行符以外的任意数据
    css选择器:根据标签属性提取数据
    .reader h1::text
        类名为reader下面h1标签里面的文本
    get() --> 提取第一个标签数据内容,返回字符串
    getall --> 提取多个数据,返回列表
    xpath节点提取:提取标签节点提取数据
"""
# 获取下来response.text <html字符串数据>, 转成可解析对象
selector = parsel.Selector(response.text)
# 提取标题
title = selector.css('.reader h1::text').get()
# 提取内容
content = '\n'.join(selector.css('#chaptercontent::text').getall())
# join 将列表合并为字符串

print(title)
print(content)

xpath选择器

"""
1.发送请求, 模拟浏览器对于url地址发送请求
    请求链接
"""

# 导入数据请求模块
import requests

# 导入数据解析模块
import parsel

# 自定义变量名url 请求链接
url = 'https://www.bige3.cc/book/66/1.html'
# 模拟浏览器 headers 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}

# 发送请求
response = requests.get(url=url, headers=headers)
# 自定义response作为变量名接收request模块下的get方法

print(response)  # <Response [200]>表示请求成功

"""
2.获取数据, 获取服务器返回响应数据内容
    开发者工具:response
    response.text --> 获取响应文本数据<网页源代码/html字符串数据>

    re正则表达式:是直接对于字符串数据进行解析
    re.findall('什么数据', '什么地方') --> 从什么地方,去找什么数据
    .*? --> 可以匹配除\n换行符以外的任意数据
    css选择器:根据标签属性提取数据
    .reader h1::text
        类名为reader下面h1标签里面的文本
    get() --> 提取第一个标签数据内容,返回字符串
    getall --> 提取多个数据,返回列表
    xpath节点提取:提取标签节点提取数据
"""
# 获取下来response.text <html字符串数据>, 转成可解析对象
selector = parsel.Selector(response.text)
# 提取标题
title = str(selector.xpath('//*[@id="read"]/div[5]/div[3]/h1/text()').get())
# 提取内容
content = '\n'.join(selector.xpath('//*[@id="chaptercontent"]/text()').getall())
# join 将列表合并为字符串

print(title)
print(content)

# 保存
# title<文件名> '.txt'文件格式 a 追加保存 encoding编码格式 as 重命名
with open(title + '.txt', mode='a', encoding='utf-8') as f:

    # 写入内容
    f.write(title)
    f.write('\n')
    f.write(content)
    f.write('\n')

整本小说爬取

# 导入数据请求模块
import requests

# 导入正则表达式模块
import re

# 导入文件操作模块
import os

# 自定义变量名url 请求链接
list_url = 'https://www.bige3.cc/book/66/'
# 模拟浏览器 headers 请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}

# 发送请求
html_data = requests.get(url=list_url, headers=headers).text
# 提取小说名字
name = re.findall('<h1>(.*?)</h1>', html_data)[0]
# 自动创建一个文件夹
file = f'{name}\\'
if not os.path.exists(file):
    os.mkdir(file)

# 提取章节url
url_list = re.findall('<dd><a href ="(.*?)">', html_data)
# for循环遍历
for url in url_list:
    index_url = 'https://www.bige3.cc' + url

    # 发送请求
    response = requests.get(url=index_url, headers=headers)
    # 自定义response作为变量名接收request模块下的get方法

    # 自定义变量名title 提取标题
    title = re.findall('<h1 class="wap_none">(.*?)</h1>', response.text)[0]
    # <h1 class="wap_none">第1章 论坛里的故事。</h1>中标题用(),然后用.*?代替,response.text中的任意一个标题
    # 返回的结果是列表,[0]直接取值
    print(response.text)
    # 自定义变量名conten 提取内容
    content = re.findall('<div id="chaptercontent" class="Readarea ReadAjax_content">(.*?)请收藏本站:https://www.bige3.cc。笔趣阁手机版:https://m.bige3.cc', response.text, re.S)[0].replace('<br /><br />\u3000\u3000', '\n')
    # 将<br /><br />\u3000\u3000用replace替换为换行
    print(content)

    # with open(file + title + '.txt', mode='a', encoding='utf-8') as f:  #单章一个txt
    with open(file + name + '.txt', mode='a', encoding='utf-8') as f:  #所有都在一个txt
        # 写入内容
        f.write(title)
        f.write('\n')
        f.write(content)
        f.write('\n')

多线程采集小说

# 导入数据请求模块
import requests

# 导入正则表达式模块
import re

# 导入文件操作模块
import os

# 导入线程池
import concurrent.futures

def get_response(html_url):
    """
    发送请求函数
    :param html_url:请求链接
    :return:response响应对象
    """
#     模拟浏览器headers请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=headers)
    return response


def get_list_url(html_url):
    """
    获取章节url/小说名
    :param html_url:小说目录页
    :return:
    """
#     调用发送请求函数
    html_data = get_response(html_url).text
    # 提取小说名字
    name = re.findall('<h1>(.*?)</h1>', html_data)[0]
    # 提取章节url
    url_list = re.findall('<dd><a href ="(.*?)">', html_data)
    return name, url_list


def get_content(html_url):
    """
    获取小说内容/小说标题
    :param html_url: 小说章节url
    :return
    """
    # 调用发送请求函数
    html_data = get_response(html_url).text
    # 提取标题
    title = re.findall('<h1 class="wap_none">(.*?)</h1>', html_data)[0]
    # 提取内容
    content = re.findall('<div id="chaptercontent" class="Readarea ReadAjax_content">(.*?)请收藏本站:https://www.bige3.cc。笔趣阁手机版:https://m.bige3.cc', html_data, re.S)[0].replace('<br /><br />\u3000\u3000', '\n')
    return title, content

def save(name, title, content):
    """
    保存数据函数
    :param name:小说名
    :param title:章节名
    :param content:内容
    :return:
    """
    # 自动创建一个文件夹
    file = f'{name}\\'
    if not os.path.exists(file):
        os.mkdir(file)

    with open(file + name + '.txt', mode='a', encoding='utf-8') as f:  #所有都在一个txt
        # 写入内容
        f.write(title)
        f.write('\n')
        f.write(content)
        f.write('\n')

    print(title, '已经保存')
def main(home_url):
        index_url = 'https://www.bige3.cc' + url
        title, content = get_content(html_url=home_url)
        save(name, title, content)


if __name__ == '__main__':
    url = 'https://www.bige3.cc/book/66/'
    name, url_list = get_list_url(html_url=url)
    exe = concurrent.futures.ThreadPoolExecutor(max_workers=7)
    for url in url_list:
        index_url = 'https://www.bige3.cc' + url
        exe.submit(main, index_url)
    exe.shutdown()

排行榜小说下载

# 导入数据请求模块
import parsel
import requests

# 导入正则表达式模块
import re

# 导入文件操作模块
import os

# 导入线程池
import concurrent.futures

def get_response(html_url):
    """
    发送请求函数
    :param html_url:请求链接
    :return:response响应对象
    """
#     模拟浏览器headers请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=headers)
    return response


def get_list_url(html_url):
    """
    获取章节url/小说名
    :param html_url:小说目录页
    :return:
    """
#     调用发送请求函数
    html_data = get_response(html_url).text
    # 提取小说名字
    name = re.findall('<h1>(.*?)</h1>', html_data)[0]
    # 提取章节url
    url_list = re.findall('<dd><a href ="(.*?)">', html_data)
    return name, url_list


def get_content(html_url):
    """
    获取小说内容/小说标题
    :param html_url: 小说章节url
    :return
    """
    # 调用发送请求函数
    html_data = get_response(html_url).text
    # 提取标题
    title = re.findall('<h1 class="wap_none">(.*?)</h1>', html_data)[0]
    # 提取内容
    content = re.findall('<div id="chaptercontent" class="Readarea ReadAjax_content">(.*?)请收藏本站:https://www.bige3.cc。笔趣阁手机版:https://m.bige3.cc', html_data, re.S)[0].replace('<br /><br />\u3000\u3000', '\n')
    return title, content

def save(name, title, content):
    """
    保存数据函数
    :param name:小说名
    :param title:章节名
    :param content:内容
    :return:
    """
    # 自动创建一个文件夹
    file = f'{name}\\'
    if not os.path.exists(file):
        os.mkdir(file)

    with open(file + name + '.txt', mode='a', encoding='utf-8') as f:  #所有都在一个txt
        # 写入内容
        f.write(title)
        f.write('\n')
        f.write(content)
        f.write('\n')

    print(title, '已经保存')

def get_novel_id(html_url):
    """
    获取小说ID
    :param html_url: 某分类的链接
    :return:
    """
    # 调用发送请求函数
    novel_data = get_response(html_url=html_url).text
    selector = parsel.Selector(novel_data)
    href = selector.css('body > div.wrap.class > div.hot > div:nth-child(1) > dl > dt > a::attr(href)').getall()
    href = [i.replace('/', '') for i in href]
    print(href)
    return href

def main(home_url):
    href = get_novel_id(html_url=home_url)
    for novel_id in href:
        novel_url = f'https://www.bige3.cc/book{novel_id}'
        name, url_list = get_list_url(html_url=novel_url)
        print(name, url_list)
        for url in url_list:
            index_url = 'https://www.bige3.cc' + url
            title, content = get_content(html_url=index_url)
            save(name, title, content)
        break

if __name__ == '__main__':
    url = 'https://www.bige3.cc/xuanhuan/'
    main(html_url)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇