python 爬虫。爬取小说--斗破苍穹

用的是python2,根据另一个博主的代码python3改的,改了不少东西才调试成功

 

 

# coding=UTF-8
import re
import urllib2
import sys
import os
reload(sys)
sys.setdefaultencoding('utf-8')
#定义一个爬取网络小说的函数
#python2和python3有些函数和模块不一样
def getNovelContent():
    html = urllib2.urlopen("http://www.quanshuwang.com/book/44/44683").read()
    html = html.decode("gbk")   #转成该网址的格式
    #<li><a href="http://www.quanshuwang.com/book/44/44683/15379609.html" title="引子 穿越的唐家三少,共2744字">引子 穿越的唐家三少</a></li>  #参考
    reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>'     #正则表达的匹配
    reg = re.compile(reg)     #可添加可不添加,增加效率
    urls = re.findall(reg,html)
    for url in urls:
        #print(url)
        chapter_url = url[0]  #章节的超链接
        chapter_title = url[1]  #章节的名字
        print(chapter_title)
        chapter_html = urllib2.urlopen(chapter_url).read()   #正文内容源代码
        chapter_html = chapter_html.decode("gbk")
        #这里不知道原因,匹配的问题,不能有空格
        #chapter_reg = r'</script>    .*?<br />(.*?)<script type="text/javascript">'
        chapter_reg = r'</script>.*?<br />(.*?)<script type="text/javascript">'
        chapter_reg = re.compile(chapter_reg,re.S)
        chapter_content = re.findall(chapter_reg,chapter_html)
        for content in chapter_content:
            content = content.replace(" ","")
            content = content.replace("&nbsp;&nbsp;&nbsp;&nbsp;","")
            content = content.replace("<br />","")
            #print(content)
            #终于搞定了,定位不到问题,这个问题是:文件目录为中文,要转码
            f = open('F:\\_1\\pythonSpider\\{}.txt'.format(chapter_title).decode('utf8').encode('gbk'),'w')
            f.write(content)
            f.close()
getNovelContent()

 

python 爬虫。爬取小说--斗破苍穹

 

 

打开cmd。运行1.py。

 

 

 

 

 

 

2.0版本:把同一个目录的章节合并到一起

效果图:

python 爬虫。爬取小说--斗破苍穹

 

 

# coding=UTF-8
#目标:纵向拓展,将1.py修改,把相同章节挪到同一个章节目录里
import re
import urllib2
import sys
import os
reload(sys)
sys.setdefaultencoding('utf-8')
#定义一个爬取网络小说的函数--换一个网址
#python2和python3有些函数和模块不一样
def getNovelContent():
    html = urllib2.urlopen("http://www.quanshuwang.com/book/44/44683").read()
    html = html.decode("gbk")   #转成该网址的格式
    #<li><a href="http://www.quanshuwang.com/book/44/44683/15379609.html" title="引子 穿越的唐家三少,共2744字">引子 穿越的唐家三少</a></li>  #参考
    reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>'     #正则表达的匹配
    reg = re.compile(reg)     #可添加可不添加,增加效率
    urls = re.findall(reg,html)
    index = -1
    compareStr = "存放当前章节名字,用于对比"
    for url in urls:
        #print(url)
        chapter_url = url[0]  #章节的超链接
        chapter_title = url[1]  #章节的名字
        #在这里将title处理一下,相同名字的放到同一个文件下
        tempIndex1 = chapter_title.find("章 ")
        tempIndex2 = chapter_title.find("(")
        #print("--------{}---{}",tempIndex1,tempIndex2)
        temp = chapter_title[tempIndex1+2:tempIndex2]
        if tempIndex1 ==-1:
            temp = chapter_title
        #print(temp)
        if temp != compareStr:
            index = index + 1
        compareStr = temp
        print('第{}章 {}.txt'.format(index,compareStr).decode('utf8').encode('gbk'))
        chapter_html = urllib2.urlopen(chapter_url).read()   #正文内容源代码
        chapter_html = chapter_html.decode("gbk")
        #这里不知道原因,匹配的问题,不能有空格
        #chapter_reg = r'</script>    .*?<br />(.*?)<script type="text/javascript">'
        chapter_reg = r'</script>.*?<br />(.*?)<script type="text/javascript">'
        chapter_reg = re.compile(chapter_reg,re.S)
        chapter_content = re.findall(chapter_reg,chapter_html)
        for content in chapter_content:
            content = content.replace(" ","")
            content = content.replace("&nbsp;&nbsp;&nbsp;&nbsp;","")
            content = content.replace("<br />","")
            #print(content)
            #终于搞定了,定位不到问题,这个问题是:文件目录为中文,要转码
            f = open('斗破苍穹\\第{}章 {}.txt'.format(index,compareStr).decode('utf8').encode('gbk'),'a')
            f.write(content)
            f.close()
getNovelContent()