吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4836|回复: 18
收起左侧

[Python 转载] python爬虫小说

  [复制链接]
D.A. 发表于 2020-6-15 22:44
本帖最后由 D.A. 于 2020-6-17 22:34 编辑

爬虫初学者第一个完整的爬虫代码,爬取了旧时光文学网的小说,由于初学代码都比较简单易懂。
得益于楼中网友的交流指点,将代码完善了。直接输入小说名称即可实现搜索。

[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import requests
from lxml import etree
from fake_useragent import UserAgent
import os
import urllib
 
#设置headers
ua = UserAgent()
headers = {
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9",
    'Connection':'close',
    "User-Agent": ua.random
    }
 
#获取url链接的xml格式
def getxml(url):
    res = requests.get(url, headers, timeout = 30)
    res.encoding = res.apparent_encoding
    text = res.text
    xml = etree.HTML(text)
    return xml
 
#获取文章内容
def getcontent(xml):
    data = xml.xpath('//div[@class="readcontent"]/text()')
    for text in data:
        if text =='\n':
            pass
        else:
            f.write(text.replace('\n',''))
 
#获取整本小说
def getbook(url):
    # 获取小说全部章节及链接
    xmllist = getxml(url)
    name = xmllist.xpath('//h1/text()')
    chapters = xmllist.xpath('//div[@id="list-chapterAll"]//dd/a/text()')
    links = xmllist.xpath('//div[@id="list-chapterAll"]//dd/a/@href')
    print('《' + name[0] + '》' + '已获取,共' + str(len(links)) + '章\n')
    # 进入小说章节页,爬取章节内容,并存入txt文档中
    f.write(name[0]+'\n\n\n')
    for i in range(0, 2):
        f.write('\n'+ chapters[i] +'\n')
        urltxt = 'https://www.oldtimescc.cc/go/42472/' + links[i]
        xmlcont = getxml(urltxt)
        page = xmlcont.xpath('//div[@class="book read"]//small/text()')
        getcontent(xmlcont)
        if '(1/2)' in page:
            urltxt2 = urltxt[0:-5] + '_2.html'
            xmlcont2 = getxml(urltxt2)
            getcontent(xmlcont2)
        print(chapters[i] + ': 已完成')
    f.close()
 
 
searchname = input('请输入小说名:')
f = open('E:/'+searchname+'.txt', 'w', encoding='utf-8')
search = urllib.parse.quote(searchname.encode('gbk'))
searchurl = 'https://www.oldtimescc.cc/modules/article/search.php?searchkey='+search
print(searchname + '正在搜索中......')
searchxml = getxml(searchurl)
try:
    bookname = searchxml.xpath('//div[@class="bookinfo"]/h1/text()')
    getbook(searchurl)
    print('下载完成,已保存在E盘根目录中!')
except:
    print('未查找到'+searchname+',请重试!')

免费评分

参与人数 2吾爱币 +3 热心值 +2 收起 理由
poetboxbak + 1 搜索可考虑用上帝之眼sikuli
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

wilison1992 发表于 2020-6-18 16:17
如果楼主想改进下脚本的话提下修改意见   
1. searchkey也可以搜索作者名字,然后抓取所有该作者下的小说,最后整合成class,加点user input 什么的,弄个菜单,terminal直接就可以调用,类似windows cmd直接运行。   
2.搜集更多类似小说网站,输入一个名字就可以提供更多下载渠道      
3.多线程下载e.g. pool     
4. 大概一个盗版小说框架就搭载完了   
wilison1992 发表于 2020-6-17 00:50
本帖最后由 wilison1992 于 2020-6-17 01:14 编辑
D.A. 发表于 2020-6-16 09:03
好的,fiddler还不太会,有空再学习学习

我看了,这个小说网上的搜索名字是加密过的。  

[Python] 纯文本查看 复制代码
1
2
3
4
import urllib
a = '杀马特'
urllib.parse.quote(a.encode('gbk'))
##'%C9%B1%C2%ED%CC%D8'
vethenc 发表于 2020-6-15 23:01
随遇而安8 发表于 2020-6-15 23:08
输入关键词后网站不变,这是怎么回事?好多网站都这样,坐等打脸
Ly_轮回 发表于 2020-6-16 00:04
感谢分享
wilison1992 发表于 2020-6-16 07:32
有些网站检验cookie,建议加cookie.   
另外爬虫只能爬虫到有权限阅读的东西,如果vip权限限制,还是建议用charles/fiddler 修改   
明明很皮 发表于 2020-6-16 08:20
关于“无法通过在代码中输入小说名直接获取小说”,一点小思路仅供参考,楼主有时间可以尝试下。先爬取所有小说名和对应的url生成一个字典  ,后面就可以直接通过小说名找到对应的url,然后下载指定小说
 楼主| D.A. 发表于 2020-6-16 09:02
明明很皮 发表于 2020-6-16 08:20
关于“无法通过在代码中输入小说名直接获取小说”,一点小思路仅供参考,楼主有时间可以尝试下。先爬取所有 ...

之前也想过,可是也没找到方法
有空我试试看fiddler行不行
 楼主| D.A. 发表于 2020-6-16 09:03
wilison1992 发表于 2020-6-16 07:32
有些网站检验cookie,建议加cookie.   
另外爬虫只能爬虫到有权限阅读的东西,如果vip权限限制,还是建议 ...

好的,fiddler还不太会,有空再学习学习
 楼主| D.A. 发表于 2020-6-16 09:05
随遇而安8 发表于 2020-6-15 23:08
输入关键词后网站不变,这是怎么回事?好多网站都这样,坐等打脸

应该也是反爬设置吧,提高爬取难度
poetboxbak 发表于 2020-6-16 17:42
随遇而安8 发表于 2020-6-15 23:08
输入关键词后网站不变,这是怎么回事?好多网站都这样,坐等打脸

你研究一下用searchkey加书名传递参数应该就能解决
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-3-15 13:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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