利用Python爬取妙笔阁小说网的《我是至尊》小说

2017-11-30  本文已影响0人  yang_xiaomie

由于妙笔阁小说网中大多数小说章节数过大,基本上为几千章。所以挑选后选取了章节数为100多章的小说《我是至尊》。


image

下面详细描述爬取过程:
1.构建请求头:

user_agent = 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'  
self.headers = {'User-Agent':user_agent}

2.利用request请求url,并将相应内容转换为html:

response = requests.get("http://www.mbige.com/info/27-27761/")
response.encoding = response.apparent_encoding
html = lxml.html.fromstring(response.text)

3.目前已经得到了小说章节列表页面的html


image

对章节进行检查,找到html中每章节的url


image
利用xpath解析html,得到所有章节的url列表:
urllst = html.xpath('//ul//li/a/@href')

4.访问每一个章节的url,利用xpath解析其html,得到每章节的内容:


image
title = ''.join(html.xpath('//td[@valign = "top"]/div[@align="center"]/h1/text()'))
part = ''.join(html.xpath('//div[@align="center"]/h2/text()'))
infro = ''.join(html.xpath('//div[@class="border_b"]/text()'))
context = '\n'.join([x.strip() for x in html.xpath('//div[@id="content"]/p/text()') if x])

5.完整代码:

import requests
import lxml.html

class myspider():
    def __init__(self):
        #构建请求头
        user_agent = 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'  
        self.headers = {'User-Agent':user_agent}
        
    def gethtml(self,url):
        #利用request请求url,并将相应内容转换为html
        try:
            response = requests.get(url)
        except:
            response = None
            pass
        else:
            response.encoding = 'gb18030'
        finally:
            html = lxml.html.fromstring(response.text)
        return html
        
    def getpage(self,url):
        #利用xpath解析html,得到所有章节的url列表
        htmlpage = self.gethtml(url);
        print(htmlpage)
        urllst = htmlpage.xpath('//ul//li/a/@href')
        return urllst

    def getcontext(self,url):
        contextlst = self.getpage(url) #获取所有章节的url列表
        num = 0
        with open('E:/我是至尊.txt', 'a+' ,encoding = 'utf8') as f :
        #爬取的每章节内容写入到E盘我是至尊.txt
            for i in contextlst[14:]:
                i= 'http://www.mbige.com' + i #由于获取到的章节url不完整,进行补全
                html = self.gethtml(i)
                title = ''.join(html.xpath('//td[@valign = "top"]/div[@align="center"]/h1/text()'))
                part = ''.join(html.xpath('//div[@align="center"]/h2/text()'))
                infro = ''.join(html.xpath('//div[@class="border_b"]/text()'))
                context = '\n'.join([x.strip() for x in html.xpath('//div[@id="content"]/p/text()') if x])
                f.write(str(title)+'\n'+str(part)+'\n'+str(infro)+'\n'+str(context)+'\n'+'\n')
                num+=1
                print("写入完成"+"第"+str(num)+"页")

    
if __name__ == '__main__':
    sp=myspider()
    url1='http://www.mbige.com/info/27-27761/'
    sp.getcontext(url1)

6.爬取完成后得到的我是至尊.txt部分内容如下:


image

到这里就爬完一部小说啦~~~~
如果对爬取全站的小说信息感兴趣,可以参考我的上一篇文章《利用Python爬取妙笔阁小说网站的小说信息并保存为txt和csv格式》,欢迎阅读。

上一篇下一篇

猜你喜欢

热点阅读