吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4538|回复: 18
上一主题 下一主题
收起左侧

[Python 转载] python爬虫小说

  [复制链接]
跳转到指定楼层
楼主
D.A. 发表于 2020-6-15 22:44 回帖奖励
本帖最后由 D.A. 于 2020-6-17 22:34 编辑

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

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

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

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

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

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

本版积分规则

返回列表

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

GMT+8, 2024-11-8 13:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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