该项目操作的前提是:
预备知识:
以下是具体的内容、细节和代码所示:
1 #coding:utf-8
2
3 #'''
4 #python项目一:爬取小说
5 #http://www.shengxu6.com/book/2967.html
6
7 #'''
8
9 import urllib2
10 import re
11 from bs4 import BeautifulSoup
12
13 #GB2312 汉字编码 GBK是GB2312的扩展
14 # 一、根据url发送的request请求,获取服务器响应内容
15 def OpenPage(url):
16 #构造请求头
17 Myheaders={}
18 #构造request请求
19 req=urllib2.Request(url,headers=Myheaders)
20 #激活request请求,向服务器端发送请求
21 #服务器端的响应被获取,一种类文本的对象
22 f=urllib2.urlopen(req)
23 #decode 解码函数 encode 编码函数
24 data=f.read()
25 #decode/encode(编码名,errors="ignore/replace(用?去替代)")
26 return data.decode("GBK",errors="ignore").encode("utf-8")
27
28 def Test1():
29 print OpenPage("http://www.shengxu6.com/book/2967.html")
30
31 # 二、解析主页内容,获取各个章节的url网址
32 def ParseMainPage(page):
33 soup=BeautifulSoup(page,"html.parse") # html.parse 是python中自带的解析库
34 #re.compile Patter对象
35 GetUrl=soup.find_all(href=re.compile("read"))
36 # 每一个元素都是一个类的实例化对象
37 UrlList=[]
38 for item in GetUrl:
39 UrlList.appened("http://www.shenegxu6.com"+item["href"])
40 return UrlList
41 #return ["http://www.shengxu6.com"+item["href"] for item in GetUrl]
42
43 def Test2():
44 page=openPage("http://www.shengxu6.com/book/2967.html")
45 List=ParseMainPage(page)
46 print List
47
48
49 # 三、解析章节内容,获取标题和正文
50 def ParseDetailSoup(page):
51 #解析章节内容
52 soup=BeautifulSoup(page,"html.parser")
53 #获取章节标题
54 # get_text()方法用来取标签内部包含的内容
55 title=soup.find_all(class_="panel-headering")[0].get_text()
56 #获取章节正文
57 content=soup.find_all(class_="content-body")[0].get_text()
58 return title, content[:-12]
59
60 def Test3():
61 page=OpenPage("http://www.shengxu6.com/book/read/2967_2008180.html")
62 print ParseDetailPage(page)
63
64
65 # 四、把获取到的内容保存到txt文件里
66 def WriteDataToFile(data):
67 # 用上下文管理器目的:防止打开的文件未关闭,
68 # 文件在此管理器中打开,出此结构后,会自动关闭
69 with open("output.txt", "a+") as f:
70 f.write(data)
71 # 原写法:
72 #f=open("output.txt","a+")
73 #f.write(data)
74 #f.close()
75
76 def Test4():
77 WriteDataToFile("abcdefghrigst")
78
79
80 if __name__=="__main__":
81 #main函数
82 url="http://www.shengxu6.com/book/2967.html"
83 #url=raw_input("请输入要爬取的网址:")
84 # 获取主页响应内容
85 MainPage=OpenPage(url)
86 # 解析主页内容,获取各个章节的url
87 UrlList=ParseMainPage(MainPage)
88 for item in UrlList:
89 print "Clone url=" + item
90 # 遍历获得各个章节的响应内容
91 detailPage=OpenPage(item)
92 # 解析各个章节内容,获取标题和正文
93 title,content=ParseDetailPage(detailPage)
94 # 把标题和正文合起来
95 data="\n\n\n" + title + "\n\n\n" + content
96 WriteDataToFile(data.encode("utf-8"))
97 print "Clone Finish"