吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3624|回复: 27
收起左侧

[Python 转载] 【Python爬虫】纵横免费小说,第一页,试水

  [复制链接]
小天0027 发表于 2020-5-7 23:22
本帖最后由 小天0027 于 2020-5-8 22:29 编辑

因某人的要求,写了个小说爬虫,应该大家都能看的懂,我下面就直接上代码了(更新个翻页+随机头,断点续传以后再说,哈哈哈)。

最后声明:本代码仅供技术交流,请勿商用,如有侵权,请告知本人,本人立即删除。

import re, os, time
from lxml import etree
from requests import get
from fake_useragent import UserAgent

class NovelDownload(object):
    def __init__(self):
        self.next = True # 翻页标记
        self.page = 1
        self.url = 'http://book.zongheng.com/store/c0/c0/b0/u0/p{}/v0/s1/t0/u0/i1/ALL.html'  # 纵横免费小说
        self.catalog_url = 'http://book.zongheng.com/showchapter/'  # 目录页面前面的部分
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.36 Safari/537.36',
        }

    def get_ids(self):
        res = get(url=self.url.format(self.page), headers=self.headers)
        # print(res.text)
        html = etree.HTML(res.text)
        novel_list = html.xpath('//div[@class="bookname"]/a/text()')
        novel_url_list = html.xpath('//div[@class="bookname"]/a/@href')
        try:
            next_page = html.xpath('//div[@class="pagenumber pagebar"]/a[@class="block scrollpage"]/@title')
            if len(next_page) > 1 or self.page == 1:
                self.page +=1
            else:
                self.next =False
        except :
            self.next =False
        ids = []
        for i in novel_url_list:
            id = re.findall(r'http://book.zongheng.com/book/(\d+)\.html', i)[0]
            ids.append(id)
        return ids, novel_list

    def get_detail(self, id):
        catalog_url = self.catalog_url + id + '.html'
        res = get(catalog_url, self.headers)
        # print(res.text)
        html = etree.HTML(res.text)
        detail_url = html.xpath('//li[@class=" col-4"]/a/@href')
        # print(detail_url)
        return detail_url

    def get_content(self, detail_url):
        detail = get(detail_url, self.headers)
        res = etree.HTML(detail.text)
        content = res.xpath('//div[@class="content"]/p/text()')
        title = res.xpath('//div[@class="title_txtbox"]/text()')[0]
        detail = '\r\n'.join(content).strip().replace('\u3000', '')
        return title, detail

    def save_file(self, title, detail, name):
        # print(title,detail,name)
        with open('f:/novel/{}/{}.txt'.format(name, title), 'w', encoding='utf-8') as f:
            f.write(detail)

    def main(self):
        n = 0
        ids, novel_list = self.get_ids()
        print('这是第{}页'.format(self.page-1))
        for name in novel_list:
            if not os.path.exists('f:/novel'):
                os.mkdir('f:/novel')
            if not os.path.exists('f:/novel/{}'.format(name)):
                os.mkdir('f:/novel/{}'.format(name))
            b = self.get_detail(ids[n])
            for detail_url in b:
                title, detail = self.get_content(detail_url)
                self.save_file(title, detail, name)
                print('《{}》,{}下载完毕'.format(name,title))
                time.sleep(5)
                ua = UserAgent()
                self.headers['User-Agent'] = ua.random
                # print(self.headers)
            n += 1
        if self.next:
            self.main()
        else:
            print('已经完了')

if __name__ == '__main__':
    a =NovelDownload()
    a.main()

emmm,没有图片,也没有说明,看函数定义就知道每个函数要做的什么,然后希望能给有需要的同学提供下思路(~~,其实我也是渣渣,大声BB)

最后,谢谢各位的浏览

免费评分

参与人数 5吾爱币 +5 热心值 +5 收起 理由
lgh520 + 1 + 1 我很赞同!
loo1221ool + 1 + 1 我很赞同!
qs1120 + 1 我很赞同!
zz77244920 + 1 + 1 我很赞同!
Zeaf + 2 + 1 如果这是渣渣,那我们没得活路了~

查看全部评分

本帖被以下淘专辑推荐:

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

Zeaf 发表于 2020-5-7 23:36
本帖最后由 Zeaf 于 2020-5-7 23:46 编辑

因为没学过etree所以看不懂(貌似是xpath的必须前置步骤,我用的正则表示不了解,大佬两个灵活组合才是最秀的),其它都还行,感觉代码很成熟啊
大佬们总是喜欢装萌新

多页完全不是问题,就是那个p1在变
 楼主| 小天0027 发表于 2020-5-8 18:39
zz77244920 发表于 2020-5-8 00:57
我刚刚学django 看到你的代码 赶快停止了学习 好好的观摩一下,果然大佬  评分已经送上了

Django跟爬虫不冲突啊,我还想做一个爬虫音乐网站的说
fbs 发表于 2020-5-7 23:37
小天使xx 发表于 2020-5-7 23:40
有机会学学python,
Asy_少洋 发表于 2020-5-7 23:42
有成品可用吗。纯小白
Zeaf 发表于 2020-5-7 23:44
Asy_少洋 发表于 2020-5-7 23:42
有成品可用吗。纯小白

建议下个python,安装代码里import上面涉及的库就可以了,这样之后都可以玩
如果想直接玩需要打包
hmily65 发表于 2020-5-8 00:13
感谢分享,学习了
头像被屏蔽
zz77244920 发表于 2020-5-8 00:57
提示: 作者被禁止或删除 内容自动屏蔽
zhwwhz 发表于 2020-5-8 02:10
学习知识了
zsj7953187 发表于 2020-5-8 02:25
爬虫学好了,基本就从小白到大神的一个阶段的进阶。值得学习。感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 06:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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