Raohz520 发表于 2021-4-24 07:58

笔趣阁全站小说爬取

本帖最后由 Raohz520 于 2021-4-24 16:55 编辑

笔趣阁全站小说爬取
1.使用了五个模块
import time   
import requests#pip install requests
import os
import random
from lxml import etree
import webbrowser2.成品 成品下载地址3.
源代码:

#https://www.biquge.info/wanjiexiaoshuo/   笔趣阁小说全本爬虫
import time
import requests
import os
import random
from lxml import etree
import webbrowser
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36 Edg/89.0.774.77"
}
noName = ['#','/','\\',':','*','?','\"','<','>','|']   #\/:*?"<>|
filePath = './保存小说'
def strZ(_str): #将特殊字符转换为空格
    ret = ''
    for _ in _str:
      if _ in noName:
            ret += " "
      else:
            ret += _
    return ret
def main():
    webbrowser.open('https://www.biquwx.la/')
    if not os.path.exists(filePath):
      os.mkdir(filePath)
    print('1.爬取指定小说')
    print('2.爬取整个站点')
    if input('使用哪种方式爬取小说?') == '1':
      appintDown()
    else :
      allDown()
    input("按下任意键退出")
def appintDown(): #爬取指定小说前提是网页没错
    page_url = input('输入要爬取的小说网站(例如 https://www.biquwx.la/10_10240/) :')
    page = requests.get(url=page_url, headers=header)
    if page.status_code == 200:# 响应就爬取
      page.encoding = 'utf-8'
      page_tree = etree.HTML(page.text)
      page_title = page_tree.xpath('//div[@id="info"]/h1/text()')
      _filePath = filePath + '/' + page_title
      if not os.path.exists(_filePath):
            os.mkdir(_filePath)
      page_dl_list = page_tree.xpath('//div[@class="box_con"]/div[@id="list"]/dl/dd')
      for _ in page_dl_list:
            _page_url = page_url + _.xpath('./a/@href')
            _page_title = _filePath + '/' + strZ(_.xpath('./a/@title')) + '.txt'
            _page = requests.get(_page_url, headers=header)
            if _page.status_code == 200:
                _page.encoding = 'utf-8'
                _tree = etree.HTML(_page.text)
                _page_content = _tree.xpath('//div[@id="content"]/text()')
                fileContent = ''
                for _ in _page_content:
                  fileContent += _ + '\n'
                with open(_page_title, 'w', encoding='utf-8') as fp:
                  fp.write(fileContent)
                  print('%s成功下载到本地' % (_page_title))
                time.sleep(random.uniform(0.05, 0.2))
def allDown(): #整个站点小说爬取
    url = 'https://www.biquge.info/wanjiexiaoshuo/'# 目录
    page = requests.get(url=url, headers=header)
    if page.status_code == 200:# 响应就爬取
      page.encoding = 'utf-8'
      tree = etree.HTML(page.text)
      page_last = tree.xpath('//div[@class="pagelink"]/a[@class="last"]/text()')
      for page_i in range(1, int(page_last)):# 小说页数遍历
            url = 'https://www.biquge.info/wanjiexiaoshuo/' + str(page_i)
            page = requests.get(url=url, headers=header)
            if page.status_code == 200:# 响应就爬取
                page.encoding = 'utf-8'
                tree = etree.HTML(page.text)
                li_list = tree.xpath('//div[@class="novelslistss"]/ul/li')
                for li in li_list:
                  page_url = li.xpath('./span[@class="s2"]/a/@href')# 目录链接
                  page_title = strZ(li.xpath('./span[@class="s2"]/a/text()'))
                  page = requests.get(url=page_url, headers=header)
                  if page.status_code == 200:# 响应就爬取
                        page.encoding = 'utf-8'
                        page_tree = etree.HTML(page.text)
                        _filePath = filePath + '/' + page_title
                        if not os.path.exists(_filePath):
                            os.mkdir(_filePath)
                        page_dl_list = page_tree.xpath('//div[@class="box_con"]/div[@id="list"]/dl/dd')
                        for _ in page_dl_list:
                            _page_url = page_url + _.xpath('./a/@href')
                            _page_title = _filePath + '/' + strZ(_.xpath('./a/@title')) + '.txt'
                            _page = requests.get(_page_url, headers=header)
                            if _page.status_code == 200:
                              _page.encoding = 'utf-8'
                              _tree = etree.HTML(_page.text)
                              _page_content = _tree.xpath('//div[@id="content"]/text()')
                              fileContent = ''
                              for _ in _page_content:
                                    fileContent += _ + '\n'
                              with open(_page_title, 'w', encoding='utf-8') as fp:
                                    fp.write(fileContent)
                                    print('%s成功下载到本地' % (_page_title))
                              time.sleep(random.uniform(0.05, 0.2))
if __name__ == '__main__':
    main()

Natu 发表于 2021-4-24 09:38

dr-pan 发表于 2021-4-24 09:32
最好给我们菜鸟上个软件或成品

这里是编程区,不是精品软件分享区,但是,你把我心里话说出来了,哈哈;www

dr-pan 发表于 2021-4-24 09:32

最好给我们菜鸟上个软件或成品{:1_923:}{:1_889:}

kylinwyz 发表于 2021-4-24 08:03

膜拜大神,大神加油啊。

jhcybb 发表于 2021-4-24 08:09

不知道怎么用,请教!

haokonglin 发表于 2021-4-24 08:12

好东西先试试

ccwuax 发表于 2021-4-24 08:13

我是来学习的,这东东不好爬,收藏了慢慢学,感谢分享

xinyuguy 发表于 2021-4-24 08:23

看了一遍 还 是 用 delphi实现 简单

熊一只 发表于 2021-4-24 08:27

谢谢分享

a397555462 发表于 2021-4-24 08:45

怎么指定下载哪部小说?

ghy197674 发表于 2021-4-24 09:10

谢谢分享

爱吃鱼的有点帅 发表于 2021-4-24 09:12

nice nice
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 笔趣阁全站小说爬取