python 三七小说爬虫小记

一、序言

从爬虫开始学习python,能接触很多基础类型,很久没有写python,脑袋里全是记忆碎片,乘这个时间把之前的东西慢慢拾兜一下,做个记录,基础的同学可以看看。

二、Html样例Demo

Ajax接口样例

        <div class="layout layout-col1">
            <div class="section-box">
                <ul class="section-list fix">
                    <h2 class="layout-tit">《九阳剑圣》正文</h2>
                    <li class="book-item"><a href="140184.html">第一章:九阳穿越(上)</a></li>
                    <li class="book-item"><a href="140185.html">第一章:九阳穿越(下)</a></li>
                    <li class="book-item"><a href="140186.html">第二章:神秘老头(上)</a></li>
                    <li class="book-item"><a href="140187.html">第二章:神秘老头(下)</a></li>
                    <li class="book-item"><a href="140188.html">第三章:初习武道</a></li>
                    <li class="book-item"><a href="140189.html">第四章:继承掌门之位</a></li>
                    <li class="book-item"><a href="140190.html">第五章:许配爱女</a></li>
                    <li class="book-item"><a href="140191.html">第六章:师父,我走了</a></li>
                    <li class="book-item"><a href="140192.html">第七章:万里之行,遭遇</a></li>
                    <li class="book-item"><a href="140193.html">第八章:绝色娇娃</a></li>
                    <li class="book-item"><a href="140194.html">第九章:云霄城主</a></li>
                    <li class="book-item"><a href="140195.html">第十章:骄傲与野性</a></li>
                    <li class="book-item"><a href="140196.html">第十一章:焰焰许配你,如何?</a></li>
                    <li class="book-item"><a href="140197.html">第十二章:阳顶天的选择</a></li>
                    <li class="book-item"><a href="140198.html">第十三章:分别,贵重礼物</a></li>
                    <li class="book-item"><a href="140199.html">第十四章:上阴阳宗</a></li>
                    <li class="book-item"><a href="140200.html">第十五章:说东方冰凌</a></li>
                    <li class="book-item"><a href="140201.html">第十六章:到阴阳宗</a></li>
                    <li class="book-item"><a href="140202.html">第十七章:拜见师娘</a></li>
                    <li class="book-item"><a href="140203.html">第十八章:初见冰凌,心动时刻</a></li>
                    <li class="book-item"><a href="140204.html">第十九章:独处,甜美时刻</a></li>
                    <li class="book-item"><a href="140205.html">第二十章:你喜欢我吗?阳师兄</a></li>
                    <li class="book-item"><a href="140206.html">第二十一章:婚约!</a></li>
                    <li class="book-item"><a href="140207.html">第二十二章:我若能活</a></li>
                    <li class="book-item"><a href="140208.html">第二十三章:被救</a></li>
                    <li class="book-item"><a href="140209.html">第二十四章:你该千刀万剐!</a></li>
                    <li class="book-item"><a href="140210.html">第二十五章:绝世之战(上)</a></li>
                    <li class="book-item"><a href="140211.html">第二十六章:绝世之战(下)</a></li>
                    <li class="book-item"><a href="140212.html">第二十七章:东方冰凌之剑!</a></li>
                    <li class="book-item"><a href="140213.html">第二十八章:再见,东方冰凌</a></li>
                    <li class="book-item"><a href="140214.html">第二十九章:婚礼,拜堂</a></li>
                    <li class="book-item"><a href="140215.html">第三十章:血誓!焰焰的心</a></li>
                    <li class="book-item"><a href="140216.html">第三十一章:相处!回云霄城</a></li>
                    <li class="book-item"><a href="140217.html">第三十二章:效忠!云霄城内</a></li>
                    <li class="book-item"><a href="140218.html">第三十三章:城主之位</a></li>
                    <li class="book-item"><a href="140219.html">第三十四章:师父显神</a></li>
                    <li class="book-item"><a href="140220.html">第三十五章:东方涅灭神识</a></li>
                    
                </ul>
            </div>
        </div>
    </div>
</div>

章节样例

<div class="container" id="container">
        <div class="row row-detail row-reader">
            <div class="layout layout-col1">
                <div class="layout-tit xs-hidden">
                    <a href="/">三七中文</a> &gt; <a href="/0/301/">九阳剑圣</a> &gt; 正文 第一章:九阳穿越(下)
                    <script>
                        textselect();
                    </script>
                </div>
                <div class="reader-main">
                    <h1 class="title">第一章:九阳穿越(下)</h1>
                    <div class="section-opt">
                        <a href="140184.html">上一章</a>
                        <span class="xs-hidden"></span>
                        <a href="/0/301/">章节列表</a>
                        <span class="xs-hidden"></span>
                        <a href="140186.html">下一页</a>
                    </div>
                    <script language="javascript">
                        style_top();
                    </script>
                    <div class="content" id="content">
                        <p>冰柱里面有东西?!</p>
                        <p>阳顶天一阵兴奋,赶紧凑上前去仔细看,还是看不大清楚。整个洞穴内唯独中央的这根冰是蓝色不透明的。此时尽管被阳顶天融化了很大部分,却依旧不怎么透明,看不见里面究竟是什么东西。</p>
                        <p>阳顶天赶紧上前,伸手环抱住那根冰柱,顿时也忍不住被冻得一阵哆嗦。还真亏得阳顶天的九阳之躯了,真的是如同火炉一般,换成其他人直接就被冻坚硬了。</p>
                        <p>越到后面越冰,最后已经几乎完全无法忍受了。</p>
                        <p>就这么抱着冰柱几个小时,每半个小时阳顶天就歇一歇,冰柱一寸一寸地融化进去,越往里面真的越是冰寒,到最后阳顶天几乎都有些痛苦难耐。</p>
                        <p>五个小时后,阳顶天已经在瑟瑟发抖,眼前一阵阵发黑,几乎要完全昏厥过去。明明知道这样抱下去就会有生命危险了,但阳顶天姓格倔强,不达目的不罢休,硬生生坚持下去。</p>
                        <p>“里面竟然是一个人?”阳顶天顿时一阵振奋,冰柱终于被融化得差不多了,变得完全透明。</p>
                        <p>真是奇怪,竟然会有人被冰封在这千米之下的洞穴内。</p>
                        <p>这是一个老头,头发和胡须完全发白,乱蓬蓬如同杂草一般。整张面孔完全是褶皱,已经老得看不出年纪。身上的衣服又脏又旧,除了没有破洞,和乞丐身上的衣服没什么区别。露在外面的双手,又瘦又干如同死树的枯枝一般。这老头从头到尾,甚至每一根发梢都流露出灰败的气息。
                        </p>
                        <p>阳顶天微微有些失望,这个人应该已经死了很久很久了,也被冰封了很久很久了。至于为什么会被封在这寒冰里面就不得而知了。</p>
                        <p>不过做事做到底,尽管里面的这个人应该已经死了,但阳顶天还是决定将他弄出来。</p>
                        <p>于是,阳顶天强忍着刺骨的严寒,再次抱住这根恐怖酷寒的冰柱,浑身瑟瑟发抖。</p>
                        <p>这最后的融化真的是对意志的极限考验,那种冰寒已经完全难以用言语来形容。终于阳顶天承受不住,眼睛一黑直接要昏厥过去。</p>
                        <p>“咔嚓……”与此同时,一阵清脆的碎裂声,那个老头身上最后一层冰彻底碎裂,粗大的冰柱彻底消失。</p>
                        <p>刺骨的冰寒停止了,阳顶天身体渐渐恢复了热量,只不过暂时无法动弹,阳顶天就这么靠在那个老头的身上,鼻子内尽是对方[***]的气味,虽然不算很臭,但是却比别的臭味更加让人难以忍受。</p>
                        <p>忽然!眼前这个老头猛地睁开双目!让阳顶天猛地一惊。</p>
                        <p>这是诈尸了吗?他不是已经死了吗?</p>
                        <p>紧接着,这个灰败老头猛地伸出枯瘦的手掐住阳顶天的脖子,长长的指甲如同刀刃一般刺在他的大动脉上,浑浊的眼球射出冰冷的寒芒,衰老的面孔充满了愤怒,对着阳顶天吼出了一句话。</p>
                        <p>声音如同用刀子刮过墙壁一般刺耳难受。但是,他说的话阳顶天完全听不懂,根本就是阳顶天从未知道的语言。</p>
                        <p>见到阳顶天没有反应,这个老朽非常愤怒生气,将之前的话再重复了一遍,听语气仿佛是在逼问阳顶天。</p>
                        <p>“我,我根本听不懂您在说什么啊?”阳顶天勉力道。</p>
                        <p>听到阳顶天回话,老朽非常激动,接连又问了好几句话,然后将丑陋垂老的面孔逼近,一连串逼问阳顶天,与此同时指甲狠狠刺入阳顶天的脖子。</p>
                        <p>阳顶天顿时觉得一阵刺痛,鲜血从脖子上流了下来。阳顶天此时力气耗尽,根本无力动弹。</p>
                        <p>接着,这个老头又逼问了一句。</p>
                        <p>阳顶天苦笑道:“老先生,我真的真的不知道您在说什么啊?”</p>
                        <p>老头暴怒,长长的指甲在阳顶天的脖子上猛地一划,顿时一道深深的血口,皮肉翻开,鲜血汹涌而出。然后又逼问了一句,阳顶天依旧听不懂。</p>
                        <p>老头怒火冲天,两支手狠狠掐住阳顶天的脖子,用阴冷的口气最后一次逼问。</p>
                        <p>虽然听不懂老头的话,但是阳顶天也明白老头说的话大概意思是,假如他再不说的话,对方就要活活掐死他了。</p>
                        <p>阳顶天顿时一阵苦笑道:“我冒着生命危险救你,却要被你活活掐死,真是何苦来由。”</p>
                        <p>老头也不懂阳顶天再说什么,但是很显然没有得到他想要的答案,顿时脸上露出一道残忍的冷笑,然后双手一紧,冰冷的枯手掐住他的脖子越来越紧。</p>
                        <p>阳顶天渐渐无法呼吸,眼睛渐渐凸出,舌头伸出了嘴外。连后悔的力气都没有了,好不容易救出来这个老头,却要被对方活活掐死。</p>
                        <p>“我可以死,但绝对不能这样不明不白窝囊地死。”阳顶天咬着牙,充满不甘的身体深处不知道从哪里涌出来的力气,猛地一脚提出。</p>
                        <p>“砰……”一脚踢在老头的胸口。</p>
                        <p>“咔嚓……”一阵清晰的折断声,仿佛枯枝被踩断的声音,老头的肋骨被踢断了。阳顶天的力气其实并不大,但是老头已经油尽灯枯,骨头又脆又干,就这么轻易被踢断了,而且整个身体也被踢倒了,双手自然也脱离了阳顶天的脖子,看来掐住阳顶天的脖子已经是老头最后的力气了。
                        </p>
                        <p>阳顶天赶紧双手双脚并用,快速地后退,远远地脱离这老头,最后背靠着洞壁,大口大口喘着气,一边看着身上的伤口,一边警惕地用余光望着这个恐怖的老头。</p>
                        <p>身上的几道伤口已经止血了,不过此时真是火辣辣的疼。不过这个洞穴太小了,想要完全远离这个疯狂老头的是不可能的。</p>
                        <p>阳顶天一边喘息一边积攒着力气,一边盯着那个危险的老头,只要他敢再次冲上来行凶的话,就不要怪他不客气了。</p>
                        <p>但是那老头被阳顶天踢倒之后,有可能胸口被踢伤了,从嘴里吐出两口黑红色的血,然后双手撑着地面想要努力坐起来,但是努力了很多次都失败了。</p>
                        <p>好像,好像他全身上下,就只有一双手能动,其他地方都不能动了,所以怎么都坐不起来。</p>
                        <p>努力了许多遍之后依旧失败,老头暴怒,发出一阵阵怒吼,双手拼命捶击冰面,顿时胸前伤口受创,又吐出几口黑色的血,双手捶打冰面也顿时变得血肉模糊。</p>
                        <p>然后,他放弃了,仰面躺在冰面上开始破口大骂。当然阳顶天听不懂他在骂什么,但是声音里面充满了仇恨和悲愤,让阳顶天都不由得受到了感染。</p>
                        <p>“这个老头也很可怜。”阳顶天忍不住涌起一阵同情。</p>
                        <p>最后,老头也不骂了,就躺在冰面上一声不响。胸前的断骨或许戳入肉里面,胸前已经高高肿起。一开始老头还在呼吸,胸口一起一伏,最后仿佛连呼吸也没有了。</p>
                        <p>尽管知道这个时候过去很危险,但阳顶天还是没有忍住,缓缓地走了过去。</p>
                        <p>远远地隔着一段距离,阳顶天轻轻地踢了踢那老头,对方没有任何反应。阳顶天有上前一步,摸了摸他的颈部动脉,还有跳动,但已经极其微弱了。</p>
                        <p>阳顶天上前,用力将老头扶起,然后解开老头的衣衫查看他胸前的伤口。</p>
                        <p>他的右胸肋骨被阳顶天踢断了,他已经瘦得如同人干一样,完全是一层皮包着上面的肋骨,所以断掉的那两根肋骨都看得清清楚楚,其中一根尖尖的骨刺刺在了肉里,瘦得只剩一层皮的右胸膛肿起足足有几寸高,又青又紫,看起来非常可怕。
                        </p>
                        <p>阳顶天利用粗浅的急救知识帮忙老头将断骨勉强正好了位置,整个过程中,因为刺骨的疼痛,老头身躯颤抖了几下,却依旧没有醒过来。</p>
                        <p>幸好断掉的两根肋骨没有断成好几截,但阳顶天为他调整断骨还是很辛苦,在这冰天雪地里面,阳顶天甚至渗出了细汗。</p>
                        <p>忽然!阳顶天眼前一痛,只见到两根长长锋利的指甲顶在自己的眼珠子面前,只要自己稍稍一栋,这两根锋利指甲就会刺入自己的眼球,将自己彻底刺瞎。</p>
                        <p>不知道什么时候,这个老头竟然醒过来了,见到阳顶天的目光望来,顿时发出一阵残忍的冷笑。此时的长指甲上还带着阳顶天的血肉,配上他阴森残忍的面孔,显得尤其的恐怖。</p>
                        <p>阳顶天顿时紧张得屏住呼吸,然后垂下目光,继续为老头正骨,仿佛完全不知道对方要戳瞎自己一般。</p>
                        <p>但是,为他正骨的时候,双手还是有些颤抖,阳顶天再次长长喘息一口,双手停止了颤抖,然后认真地调整老头胸前的断骨。</p>
                        <p>他的这种行为没有获得任何回报,老头反而给了一阵充满嘲讽的冷笑,仿佛在嘲笑阳顶天的虚伪和狡诈。</p>
                        <p>阳顶天没有理会,继续认真救治老头。</p>
                        <p>老头的指甲缓缓用力,锋利的指甲一点点刺入阳顶天的肉里面,如同锋利的刀刃一般一毫米一毫米刺了进去。</p>
                        <p>刺入脖子的指甲已经进入了近一厘米了,已经刺穿了外层的皮肉,很快就要刺到阳顶天的眼球了。</p>
                        <p>阳顶天的目光一缩,右手缓缓成拳,下一秒钟他就猛地一拳将老头胸前断骨砸入心脏,彻底让老头瞬间毙命!</p>
                        <p>但是,老头却忽然停住了,反而将刺入他皮肉的指甲拔了出来,然后缓缓闭上了眼睛,任由阳顶天施为。</p>
                        <p>阳顶天长长呼了一口气,平静一下乱跳的心脏,然后继续救治老头。</p>
                        <p>最后,为老头调整好了断骨,然后用衣服小心包扎好。尽管这样做实在太粗糙了,但实在没有办法,洞穴里面连一根木头都没有。</p>
                        <p>做好一切后,阳顶天又退避三舍,退到距离老头最远的地方,靠着洞壁坐下。</p>
                        <p>而这个危险的老头,闭着眼睛一动不动。;</p>
                    </div>
                    <script language="javascript">
                        style_end();
                    </script>
                    <div class="section-opt m-bottom-opt" style="margin: 0px; top: 0">
                        <a href="140184.html">上一章</a>
                        <span class="xs-hidden"></span>
                        <a href="/0/301/">章节列表</a>
                        <span class="xs-hidden"></span>
                        <a href="140186.html">下一页</a>
                    </div>
                </div>
            </div>
        </div>
    </div>

三、代码

安装导入包

pip install requests
pip install parsel

parsel包

parsel是对 HTML 和 XML 进行解析库,是一个python的第三方库,相当于css选择器+xpath+re。
Parsel官网
无论是使用css选择器,还是xpath,re,都需要先创建一个parsel.Selector对象

selector = Selector(html)  # 初始化Selector()对象

创建了Selector对象之后,可以进行xpath、css的任意切换
实际上使用css进行获取节点,最终也是转换成xpath进行查询

将xpath()函数查询到的结果转换为字符串或者列表,需要使用下列函数:
get():将css() 查询到的第一个结果转换为str类型
getall():将css() 查询到的结果转换为python的列表

代码Demo

import requests
import parsel


def get_link():
    url = "https://www.777zw.net/0/301/"
    all_html = requests.get(url).content.decode('UTF-8')
    selector = parsel.Selector(all_html)
    items = selector.xpath('//ul[@class="section-list fix"]/li/a')
    link_list = []
    for i in items:
        href_link = i.xpath('./@href').get()
        chapter_link = url + href_link
        link_list.append(chapter_link)
    return link_list



def chapter_info(chapter_url):
    # chapter_url = "https://www.777zw.net/0/301/140185.html"
    html = requests.get(chapter_url).content.decode('utf-8')
    selector = parsel.Selector(html)
    '''
        获取章节title
    '''
    chapter_title_info = selector.xpath('//h1[@class="title"]')
    chapter_title = chapter_title_info.xpath('./text()').get()

    '''
        chapters_info_list 获取div标签下id为content的所有p标签,返回的是一个列表
        paragraphs_info 获取p标签里的文本内容使用./text()
    '''
    chapters_info_list = selector.xpath('//div[@id="content"]/p')
    paragraphs_list = []
    for i in chapters_info_list:
        paragraphs_info = i.xpath('./text()').get()
        paragraphs_list.append(paragraphs_info)
    paragraphs = ''.join(paragraphs_list)
    # return chapter_title,paragraphs

    with open("xiaoshuo" + '.txt', mode='a', encoding='utf-8') as f:
        f.write(chapter_title)
        f.write('\r\n')
        f.write(paragraphs)
        f.write('\r\n')

if __name__=="__main__":
    url_all = get_link()
    for chapter_url in url_all:
        chapter_info(chapter_url)

验证

在这里插入图片描述

乱码问题

python response乱码
    requests.get(url).text -> requests.get(url).content
    前者需要用encode进行编码后用decode解码,后者直接可以解码
    万能方法:
        requests.get(url).text.encode('iso-8859-1').decode('utf-8/gbk')
author:xinyiliu

第二代三七爬虫

import sys
import requests
import parsel

def get_link():
    url = "http://37zw.cc/19/19734/"
    link_url = "http://37zw.cc"
    all_html = requests.get(url).content.decode('GBK')
    selector = parsel.Selector(all_html)
    items = selector.xpath('//div[@class="listmain"]/dl/dd/a')
    link_list = []
    for i in items:
        href_link = i.xpath('./@href').get()
        chapter_link = link_url + href_link
        link_list.append(chapter_link)
    return link_list

def chapter_info(chapter_url):
    html = requests.get(chapter_url).content.decode('GBK')
    selector = parsel.Selector(html)
    '''
        获取章节title
    '''
    chapter_title_info = selector.xpath('//div[@class="content"]/h1')
    chapter_title = chapter_title_info.xpath('./text()').get()

    '''
        chapters_info_list 获取div标签下id为content的所有p标签,返回的是一个列表
        paragraphs_info 获取p标签里的文本内容使用./text()
    '''
    chapters_info_list = selector.xpath('//div[@id="content"]/text()').getall()
    paragraphs_list = []
    for i in chapters_info_list:
        paragraphs_list.append(i.strip())
    paragraphs = ''.join(paragraphs_list)
    # sys.argv[1]
    with open("牧神记" + '.txt', mode='a', encoding='utf-8') as f:
        f.write(chapter_title)
        f.write('\r\n')
        f.write(paragraphs)
        f.write('\r\n')
    f.close()

if __name__=="__main__":
    url_all = get_link()
    for chapter_url in url_all:
        chapter_info(chapter_url)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值