python项目:随时免费阅读好看的小说

python项目:用爬虫爬取想看的小说

该项目操作的前提是:

  • 在Centos上要求python至少是2.7版本的;
  • 在linux上安装pip:yum install python-pip
  • 安装BeautifulSoup4 爬虫库:pip install BeautifulSoup4

预备知识:

  • urllib2 python 标准库:提供一系列的针对URL的操作方法。
  • urllib python 标准库:也是提供一系列的针对URL的操作方法。
  • 两者为互补关系。urllib2 可以让我们设置headers请求头;但是 urllib 不能设置。
  • re python 标准库:提供一系列的针对字符串匹配的方法(包含了很多关于正则的方法)。
  • BeautifulSoup4 :为爬虫库。
  • pip python 安装工具:可以为我们安装绝大多数的 python 库。

以下是具体的内容、细节和代码所示:

  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"           

猜你喜欢

转载自blog.csdn.net/bit666888/article/details/81323253
今日推荐