python爬虫番茄小说

根据各个资料,我写了一个可以根据番茄小说id下载对应内容的爬虫程序。

(注意:本程序只能用于学习参考)

(注意:需要爬完整内容你还是需要vip的捏)

import time

import bs4
import requests
import re
import lxml


url = 'https://fanqienovel.com/page/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
    'Accept-Language': 'en-US,en;q=0.5',
    # 其他自定义的请求头信息
}

response = requests.get(url, headers=headers)

soup = bs4.BeautifulSoup(response.text, 'lxml')


CODE_ST = 58344
CODE_ED = 58715
charset = ['D', '在', '主', '特', '家', '军', '然', '表', '场', '4', '要', '只', 'v', '和', '?', '6', '别', '还', 'g',
           '现', '儿', '岁', '?', '?', '此', '象', '月', '3', '出', '战', '工', '相', 'o', '男', '首', '失', '世', 'F',
           '都', '平', '文', '什', 'V', 'O', '将', '真', 'T', '那', '当', '?', '会', '立', '些', 'u', '是', '十', '张',
           '学', '气', '大', '爱', '两', '命', '全', '后', '东', '性', '通', '被', '1', '它', '乐', '接', '而', '感',
           '车', '山', '公', '了', '常', '以', '何', '可', '话', '先', 'p', 'i', '叫', '轻', 'M', '士', 'w', '着', '变',
           '尔', '快', 'l', '个', '说', '少', '色', '里', '安', '花', '远', '7', '难', '师', '放', 't', '报', '认',
           '面', '道', 'S', '?', '克', '地', '度', 'I', '好', '机', 'U', '民', '写', '把', '万', '同', '水', '新', '没',
           '书', '电', '吃', '像', '斯', '5', '为', 'y', '白', '几', '日', '教', '看', '但', '第', '加', '候', '作',
           '上', '拉', '住', '有', '法', 'r', '事', '应', '位', '利', '你', '声', '身', '国', '问', '马', '女', '他',
           'Y', '比', '父', 'x', 'A', 'H', 'N', 's', 'X', '边', '美', '对', '所', '金', '活', '回', '意', '到', 'z',
           '从', 'j', '知', '又', '内', '因', '点', 'Q', '三', '定', '8', 'R', 'b', '正', '或', '夫', '向', '德', '听',
           '更', '?', '得', '告', '并', '本', 'q', '过', '记', 'L', '让', '打', 'f', '人', '就', '者', '去', '原', '满',
           '体', '做', '经', 'K', '走', '如', '孩', 'c', 'G', '给', '使', '物', '?', '最', '笑', '部', '?', '员', '等',
           '受', 'k', '行', '一', '条', '果', '动', '光', '门', '头', '见', '往', '自', '解', '成', '处', '天', '能',
           '于', '名', '其', '发', '总', '母', '的', '死', '手', '入', '路', '进', '心', '来', 'h', '时', '力', '多',
           '开', '己', '许', 'd', '至', '由', '很', '界', 'n', '小', '与', 'Z', '想', '代', '么', '分', '生', '口',
           '再', '妈', '望', '次', '西', '风', '种', '带', 'J', '?', '实', '情', '才', '这', '?', 'E', '我', '神', '格',
           '长', '觉', '间', '年', '眼', '无', '不', '亲', '关', '结', '0', '友', '信', '下', '却', '重', '己', '老',
           '2', '音', '字', 'm', '呢', '明', '之', '前', '高', 'P', 'B', '目', '太', 'e', '9', '起', '稜', '她', '也',
           'W', '用', '方', '子', '英', '每', '理', '便', '西', '数', '期', '中', 'C', '外', '样', 'a', '海', '们',
           '任']

#解析章节加密内容
def interpreter(cc):
    bias = cc - CODE_ST
    if charset[bias] == '?':
        return chr(cc)
    return charset[bias]

#获取小说章节内容
def funLog(text):
    soup = bs4.BeautifulSoup(text.text, 'lxml')
    novel = soup.find('div', class_='muye-reader-content noselect')
    p1 = ''
    for p in novel.children:
        text = p.get_text()
        length = len(text)
        for ind in range(length):
            cc = ord(text[ind])
            ch = text[ind]
            if CODE_ST <= cc <= CODE_ED:
                ch = interpreter(cc)
            p1 += ch
    return p1

def extract_chatper_titles(html_content):
    pattern = r'title\":\"(.*?)\"'
    titles = re.findall(pattern,html_content)
    return titles

def Htltle(text):
    novel = text.find('h1').text
    return novel

#"div.volume.volume_first + div.chapter > div.chapter-item"

#print(page_text)
a = time.time()
dir_path = 'D:\资料库\测试爬虫'


def Run(id):
    response = requests.get(url+id, headers=headers)
    soup = bs4.BeautifulSoup(response.text, 'lxml')
    li_list = soup.select(
        "div.chapter-item"
    )
    total = len(li_list)
    titles = extract_chatper_titles(response.text)
    for i,div in enumerate(li_list):
        title = div.a.string
        detail_url = "https://fanqienovel.com"+div.a["href"]
        #print(detail_url)
        response = requests.get(url=detail_url,headers=headers)
        #print(response.text)
        content = funLog(response)  # 获取章节内容
        with open(dir_path + "/" + Htltle(soup) + ".txt", 'a',encoding='utf-8') as f:
            f.write('{}\n'.format(titles[i+1]))
            f.write(content)
            f.write('\n\n\n')
            print('已下载{}'.format((i + 1) / len(titles)))
    time.sleep(0.2)  # 每隔200毫秒爬取一章

def Main():
    str = input("输入小说id")
    Run(str)
    print('下载完成')
    b = time.time()
    print('用时{}'.format(b - a))

Main()

中间charset 和几个解密方法是为了解决乱码问题。

参考利用python爬取番茄小说txt – Jeffreys' Blog (s13est.com)

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值