用的是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(" ","")
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()
打开cmd。运行1.py。
2.0版本:把同一个目录的章节合并到一起
效果图:
# 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(" ","")
content = content.replace("<br />","")
#print(content)
#终于搞定了,定位不到问题,这个问题是:文件目录为中文,要转码
f = open('斗破苍穹\\第{}章 {}.txt'.format(index,compareStr).decode('utf8').encode('gbk'),'a')
f.write(content)
f.close()
getNovelContent()