bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Python開發簡單爬蟲

Python開發簡單爬蟲

         源碼網址:  http://download.csdn.NET/detail/hanchaobiao/9860671

目前成都創新互聯已為成百上千的企業提供了網站建設、域名、網絡空間、網站托管、企業網站設計、杭州網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。

一、爬蟲的簡介及爬蟲技術價值

       1.什么是爬蟲:

         一段自動抓取互聯網信息的程序,可以從一個URL出發,訪問它所關聯的URL,提取我們所需要的數據。也就是說爬蟲是自動訪問互聯網并提取數據的程序。

Python開發簡單爬蟲

            入口:http://baike.baidu.com/item/Python

           分析URL格式:防止訪問無用路徑 http://baike.baidu.com/item/{標題}

           數據:抓取百度百科相關Python詞條網頁的標題和簡介

                       通過審查元素得標題元素為 :class="lemmaWgt-lemmaTitle-title"

                       簡介元素為:class="lemma-summary"

            頁面編碼:UTF-8

            作為定向爬蟲網站要根據爬蟲的內容升級而升級如運行出錯可能為百度百科升級,此時則需要重新分析目標

            代碼集注釋:

            創建spider_main.py

[python] view plain copy

  1. #創建類  

  2. from imooc.baike_spider import url_manager,html_downloader,html_output,html_parser  

  3. class spiderMain:  

  4.     #構造函數 初始化  

  5.     def __init__(self):  

  6.         #實例化需引用的對象  

  7.         self.urls = url_manager.UrlManager()  

  8.         self.downloader = html_downloader.HtmlDownLoader()  

  9.         self.output = html_output.HtmlOutPut()  

  10.         self.parser = html_parser.HtmlParser()  

  11.   

  12.     def craw(self,root_url):  

  13.         #添加一個到url中  

  14.         self.urls.add_new_url(root_url)  

  15.         count = 1  

  16.         while self.urls.has_new_url():  

  17.             try:  

  18.                 new_url = self.urls.get_new_url()  

  19.                 print('craw %d : %s' %(count,new_url))  

  20.                 #下載  

  21.                 html_context = self.downloader.downloade(new_url)  

  22.                 new_urls,new_data = self.parser.parse(new_url,html_context)  

  23.                 print(new_urls)  

  24.                 self.urls.add_new_urls(new_urls)  

  25.                 self.output.collect_data(new_data)  

  26.                 #爬一千個界面  

  27.                 if(count==1000):  

  28.                     break  

  29.                 count+=1  

  30.             except:  

  31.                 print("craw faile")  

  32.         self.output.output_html()  

  33.   

  34.   

  35. #創建main方法  

  36. if __name__ == "__main__":  

  37.     root_url = "http://baike.baidu.com/item/Python"  

  38.     obj_spider = spiderMain()  

  39.     obj_spider.craw(root_url)  


     創建url_manager.py

[python] view plain copy

  1. class UrlManager:  

  2.     'url管理類'  

  3.     #構造函數初始化set集合  

  4.     def __init__(self):  

  5.         self.new_urls = set() #待爬取的url  

  6.         self.old_urls = set() #已爬取的url  

  7.   

  8.     #向管理器中添加一個新的url  

  9.     def add_new_url(self,root_url):  

  10.         if(root_url is None):  

  11.             return  

  12.         if(root_url not in self.new_urls and root_url not in self.old_urls):  

  13.             #既不在待爬取的url也不在已爬取的url中,是一個全新的url,因此將其添加到new_urls  

  14.             self.new_urls.add(root_url)  

  15.   

  16.     # 向管理器中添加批量新的url  

  17.     def add_new_urls(self,urls):  

  18.         if(urls is None or len(urls) == 0):  

  19.             return  

  20.         for url in urls:  

  21.             self.add_new_url(url) #調用add_new_url()  

  22.   

  23.     #判斷是否有新的待爬取的url  

  24.     def has_new_url(self):  

  25.         return len(self.new_urls) != 0  

  26.     #獲取一個待爬取的url  

  27.     def get_new_url(self):  

  28.         new_url = self.new_urls.pop()  

  29.         self.old_urls.add(new_url)  

  30.         return new_url  


    創建html_downloader.py

[python] view plain copy <span >from urllib import request  from urllib.parse import quote  import string  class HtmlDownLoader:      '下載頁面內容'      def downloade(self,new_url):          if(new_url is None):              return None          #解決請求路徑中含義中文或特殊字符          url_ = quote(new_url, safe=string.printable);          response = request.urlopen(url_)          if(response.getcode()!=200):              return None #請求失敗          html = response.read()          return html.decode("utf8")</span>

       創建html_parser.py

[python] view plain copy

  1. from bs4 import BeautifulSoup  

  2. import re  

  3. from urllib import parse  

  4. class HtmlParser:  

  5.     #page_url 基本url 需拼接部分  

  6.     def _get_new_urls(self,page_url,soup):  

  7.         new_urls = set()  

  8.         #匹配 /item/%E8%87%AA%E7%94%B1%E8%BD%AF%E4%BB%B6  

  9.         links = soup.find_all('a',href=re.compile(r'/item/\w+'))  

  10.         for link in links:  

  11.             new_url = link["href"]  

  12.             #例如page_url=http://baike.baidu.com/item/Python new_url=/item/史記·2016?fr=navbar  

  13.             #則使用parse.urljoin(page_url,new_url)后 new_full_url = http://baike.baidu.com/item/史記·2016?fr=navbar  

  14.             new_full_url = parse.urljoin(page_url,new_url)  

  15.             new_urls.add(new_full_url)  

  16.         return new_urls  

  17.   

  18.     def _get_new_data(self,page_url,soup):  

  19.         #<dd class="lemmaWgt-lemmaTitle-title"> <h2>Python</h2>  

  20.         red_data = {}  

  21.         red_data['url'] = page_url  

  22.         title_node = soup.find('dd',class_="lemmaWgt-lemmaTitle-title").find('h2') #獲取標題內容  

  23.         red_data['title'] = title_node.get_text()  

  24.         #<div class="lemma-summary" label-module="lemmaSummary">  

  25.         summary_node = soup.find('div',class_="lemma-summary")  

  26.         red_data['summary'] = summary_node.get_text()  

  27.         return red_data  

  28.   

  29.   

  30.   

  31.     #new_url路徑 html_context界面內容  

  32.     def parse(self,page_url, html_context):  

  33.         if(page_url is None or html_context is None):  

  34.             return  

  35.         #python3缺省的編碼是unicode, 再在from_encoding設置為utf8, 會被忽視掉,去掉【from_encoding = "utf-8"】這一個好了  

  36.         soup = BeautifulSoup(html_context, "html.parser")  

  37.         new_urls = self._get_new_urls(page_url, soup)  

  38.         new_data = self._get_new_data(page_url, soup)  

  39.         return new_urls,new_data  

       創建html_output.py

[python] view plain copy

  1. class HtmlOutPut:  

  2.     def __init__(self):  

  3.         self.datas = [] #存放搜集的數據  

  4.     def collect_data(self,new_data):  

  5.         if(new_data is None):  

  6.             return  

  7.         self.datas.append(new_data)  

  8.   

  9.     def output_html(self):  

  10.         fout = open('output.html','w',encoding='utf8')  #寫入文件 防止中文亂碼  

  11.         fout.write('<html>\n')  

  12.         fout.write('<body>\n')  

  13.         fout.write('<table>\n')  

  14.         for data in self.datas:  

  15.             fout.write('<tr>\n')  

  16.             fout.write('<td>%s</td>\n'%data['url'])  

  17.             fout.write('<td>%s</td>\n'%data['title'])  

  18.             fout.write('<td>%s</td>\n'%data['summary'])  

  19.             fout.write('</tr>\n')  

  20.         fout.write('</table>\n')  

  21.         fout.write('</body>\n')  

  22.         fout.write('</html>\n')  

  23.         fout.close()  


視頻網站:http://www.imooc.com/learn/563

源碼網址:http://download.csdn.Net/detail/hanchaobiao/9860671

分享題目:Python開發簡單爬蟲
當前URL:http://vcdvsql.cn/article14/gjooge.html

成都網站建設公司_創新互聯,為您提供網站制作搜索引擎優化網站導航服務器托管品牌網站制作用戶體驗

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設