吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4397|回复: 25
收起左侧

[Python 转载] 入门python爬取精彩阅读网的小说 --- 2

  [复制链接]
HaNnnng 发表于 2018-11-14 01:22
本帖最后由 HaNnnng 于 2018-11-14 01:29 编辑

之前写了一篇面向过程的爬虫帖子https://www.52pojie.cn/forum.php ... &extra=#pid22524169

简单来说面向过程就是把分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

而面向对象则是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。


在我的理解就是,面向过程要手把手教电脑干活。而面向对象只要设定一个模拟问题解决的方案,就会自动教电脑干活。


我们先将之前面向过程的代码根据功能改成一个个方法,函数。如下面getHtml是获取网页信息,get_chapter_info是获取章节信息。最后再调用这个方法。
[Python] 纯文本查看 复制代码
# _*_ coding: utf_8 _*_
__author__ = 'lwh'
__date__ = '2018/11/12 19:56'

import re
import requests


# 获取网页信息
def getHtml(url):
    response = requests.get(url)
    response.encoding = 'utf-8'
    html = response.text
    return html


def get_chapter_info(url):
    html = getHtml(url)
    nover_title = re.findall(r'<meta property="og:novel:book_name" content="(.*?)"/>', html)[0]
    dl = re.findall(r'<dl class="panel-body panel-chapterlist">  <dd class="col-md-3">.*?</dl>', html, re.S)[0]
    chapter_info_list = re.findall(r'href="(.*?)">(.*?)<', dl)
    return nover_title, chapter_info_list


def get_chapter_content(chapter_url):    html = getHtml(chapter_url)
    chapter_content = re.findall(r' <div class="panel-body" id="htmlContent">(.*?)</div> ', html, re.S)[0]
    chapter_content = chapter_content.replace('<br />', '')
    chapter_content = chapter_content.replace('<br>', '')
    chapter_content = chapter_content.replace('<br />', '')
    chapter_content = chapter_content.replace('<p>', '')
    chapter_content = chapter_content.replace('</p>', '')
    chapter_content = chapter_content.replace(' ', '')

    return chapter_content


def spider(url):
    nover_title, chapter_info_list = get_chapter_info(url)

    f = open('%s.txt' % nover_title, "w", encoding='utf-8')
    # 下载各章节
    for chapter_url, chapter_title in chapter_info_list:
        chapter_url = 'http://www.jingcaiyuedu.com%s' % chapter_url
        chapter_content = get_chapter_content(chapter_url)

        f.write(chapter_title)
        f.write('\n')
        f.write(chapter_content)
        f.write('\n\n\n\n\n')
        print(chapter_url)


if __name__ == '__main__':
    nover_url = 'http://www.jingcaiyuedu.com/book/376655.html'
    spider(nover_url)
我们也可以将它彻底封装成一个类,这样就算别人不知道内部实现的细节也能直接调用
[Python] 纯文本查看 复制代码
# _*_ coding: utf_8 _*_
__author__ = 'lwh'
__date__ = '2018/11/12 20:10'

import re
import requests


class Spider():
    # 获取网页信息
    def getHtml(self, url):
        response = requests.get(url)
        response.encoding = 'utf-8'
        html = response.text
        return html

    def get_chapter_info(self, url):
        html = self.getHtml(url)
        nover_title = re.findall(r'<meta property="og:novel:book_name" content="(.*?)"/>', html)[0]
        dl = re.findall(r'<dl class="panel-body panel-chapterlist">  <dd class="col-md-3">.*?</dl>', html, re.S)[0]
        chapter_info_list = re.findall(r'href="(.*?)">(.*?)<', dl)
        return nover_title, chapter_info_list
        
    def get_chapter_content(self, chapter_url):
        html = self.getHtml(chapter_url)
        chapter_content = re.findall(r' <div class="panel-body" id="htmlContent">(.*?)</div> ', html, re.S)[0]
        chapter_content = chapter_content.replace('<br />', '')
        chapter_content = chapter_content.replace('<br>', '')
        chapter_content = chapter_content.replace('<br />', '')
        chapter_content = chapter_content.replace('<p>', '')
        chapter_content = chapter_content.replace('</p>', '')
        chapter_content = chapter_content.replace(' ', '')

        return chapter_content

    def spider(self, url):
        nover_title, chapter_info_list = self.get_chapter_info(url)

        f = open('%s.txt' % nover_title, "w", encoding='utf-8')
        # 下载各章节
        for chapter_url, chapter_title in chapter_info_list:
            chapter_url = 'http://www.jingcaiyuedu.com%s' % chapter_url
            chapter_content = self.get_chapter_content(chapter_url)

            f.write(chapter_title)
            f.write('\n')
            f.write(chapter_content)
            f.write('\n\n\n\n\n')
            print(chapter_url)

免费评分

参与人数 7吾爱币 +6 热心值 +7 收起 理由
Qiulz + 1 + 1 鼓励转贴优秀软件安全工具和文档!
+傻托 + 1 用心讨论,共获提升!
x-joker + 1 + 1 用心讨论,共获提升!
奈须蘑菇 + 1 + 1 我很赞同
gfjykldd + 1 + 1 用心讨论,共获提升!
91mumu + 1 + 1 我很赞同!
nightingwish + 1 + 1 我很赞同!

查看全部评分

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

 楼主| HaNnnng 发表于 2018-11-14 13:18
本帖最后由 HaNnnng 于 2018-11-14 13:27 编辑
chantmisaya 发表于 2018-11-14 09:52
如果是一些登录或者充值才可以看的网站,有什么办法可以爬下来吗

登录的话就模拟登录,用post提交数据,分析数据。
首先分析请求参数,找出哪些是动态参数,然后分类参数,哪些参数是页面源码中能解析出,哪些是需要动态生成的,如密码加密,如
果是js动态加密,那就提取加密js文件出来,还要留意请求头的参数,然后调用就基本可以了。如果有VIP账号会简单点
junsky1129 发表于 2018-11-14 03:36
nightingwish 发表于 2018-11-14 03:46
夏雨未晴 发表于 2018-11-14 07:52 来自手机
谢谢大佬分享,非常有用
sdlizj 发表于 2018-11-14 08:02 来自手机
想爬点电影看看
头像被屏蔽
kongbaiGG 发表于 2018-11-14 08:25
提示: 作者被禁止或删除 内容自动屏蔽
cxbb 发表于 2018-11-14 08:27
谢谢分享!
maokiss 发表于 2018-11-14 08:28
非常好,谢谢大佬分享!~~
xzxlove 发表于 2018-11-14 08:52
学Python用什么软件打代码比较好
ssqhmmm 发表于 2018-11-14 08:52 来自手机
谢谢大佬分享,正需要这样的代码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-5-18 01:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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