绿竹 发表于 2020-12-23 22:08

新手实战写的小说爬取【新笔趣阁】

刚学习python 今天实践一下,因为个人比较喜欢看小说就写了一个新笔趣阁的爬虫
望大佬指点,因为还没学多线程所以是个单线程的
看了一下其他人的帖子,我又添加了从中间某一章开始下载的功能import os
import re

import requests

headers = {
    'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/72.0.3815.400',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

}
# 书名存储变量
name = ''
zhang = 0


def get_urls(url):
    # 请求网址
    html = requests.get(url, headers=headers)
    # 指定页面编码
    html.encoding = html.apparent_encoding
    # 用正则获取章节URL
    reg = r"<dd><a href='(.*?)' >(.*?)</a></dd>"
    urls = re.findall(reg, html.text)
    # 用正则获取章节名
    reg2 = r"<h1>(.*?)</h1>"
    name = re.findall(reg2, html.text)
    return urls, name


def download_book(urls, zhang):
    # 循环输出章节URL
    for url in urls:
      # 章节URL
      bookUrl = url
      # 获取到的URL如下:/10/10489/4535761.html 所以要拼接一下
      bookUrl = 'http://www.xbiquge.la' + bookUrl
      bookTitle = url
      # 删除章节标题中可能影响创建文件的符号如:*?:/\\<>|
      bookTitle = re.sub('[*?:/\\<>|]', '', bookTitle)
      # 抓取每一章节内容
      chapter = requests.get(bookUrl, headers=headers)
      chapter.encoding = chapter.apparent_encoding
      chapter_reg = r'<div id="content">(.*?)<p><a href='
      chapter_content = re.findall(chapter_reg, chapter.text)
      # 转化list为str
      data = str(chapter_content)
      # 替换章节内容中的字符
      data = re.sub('[\r\[\]]', '', data)
      data = data.replace(' ', ' ').replace('<br />', '').replace('\\r\\r', '').replace('\'', '')
      # 将数据写入文档
      print("正在下载:%s" % bookTitle)
      with open('./Books/' + name + '/{}.txt'.format(bookTitle), 'w+', encoding='gbk') as f:
            f.write(data)
            f.close()


def mkdir(name):
    folder = os.path.exists('Books\\' + name)
    if not folder:# 判断是否存在文件夹如果不存在则创建为文件夹
      os.makedirs('Books\\' + name)# makedirs 创建文件时如果路径不存在会创建这个路径
      print('文件夹不存在,已创建')
    else:
      print('文件夹存在')


if __name__ == '__main__':
    print("书籍ID由新笔趣阁:www.xbiquge.la 提供")
    bookId = input("请输入书籍ID:")
    url = 'http://www.xbiquge.la/1/'
    url = url + bookId + '/'
    # url = 'http://www.xbiquge.la/1/1618'
    zhang = int(input("请输入开始章节:"))
    zhang = zhang - 1
    urls = get_urls(url)
    name = get_urls(url)
    name = str(name)
    name = name.replace("['", "").replace("']", "")
    mkdir(name)
    download_book(urls, zhang)



ouyangcw 发表于 2020-12-23 22:19

多谢楼主分享

lmrbaba 发表于 2020-12-23 22:20

谢谢大佬分享

spring2272 发表于 2020-12-23 22:26

感谢楼主分享

握紧她的胸 发表于 2020-12-23 22:26

楼主牛逼

pjxl521 发表于 2020-12-23 22:45

谢谢分享

dingxiaohe 发表于 2020-12-23 23:41


感谢分享,谢谢提供分享

m769219501 发表于 2020-12-24 00:56

谢谢分享!

3382905562 发表于 2020-12-24 01:31

多谢分享多谢分享

kakukk 发表于 2020-12-24 07:24

6666666666
页: [1] 2
查看完整版本: 新手实战写的小说爬取【新笔趣阁】