python 簡單爬蟲(beatifulsoup)

来源:https://www.cnblogs.com/zhouwenfan-home/archive/2018/08/12/9465520.html
-Advertisement-
Play Games

恢復內容開始 python爬蟲學習從0開始 第一次學習了python語法,迫不及待的來開始python的項目。首先接觸了爬蟲,是一個簡單爬蟲。個人感覺python非常簡潔,相比起java或其他面向對象的編程語言,動態語言不需要聲明函數或變數類型。python有20年的發展歷史,以簡潔高效聞名,pyt ...


---恢復內容開始---

python爬蟲學習從0開始

    第一次學習了python語法,迫不及待的來開始python的項目。首先接觸了爬蟲,是一個簡單爬蟲。個人感覺python非常簡潔,相比起java或其他面向對象的編程語言,動態語言不需要聲明函數或變數類型。python有20年的發展歷史,以簡潔高效聞名,python最初只是一個馬戲團的名字,它的哲學是‘用一種方法完成一件事情’。我第一次使用python時就被它的簡潔高效迷住了,相比起c++和java,他簡直太棒了。而且現階段的大數據和人工智慧領域,python都有著絕對無可替代的地位。

   一、爬蟲是什麼?

    大數據時代,海量的數據以兆億級的規模出現,而且每時每刻都在不停的變化,怎樣從這麼多數據中提取我們所需要的數據,就變得十分的重要,尤其對於一些大企業,數據就是公司發展的命脈。網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程式或者腳本。就是爬蟲程式會自動沿著制定的URL去爬取有用的數據,搜索引擎就是建立在爬蟲基礎上的。但是搜索引擎有自身的局限性,只能夠通過關鍵字進行檢索,我們需要手動進入相關網頁進行篩選。這個時候如果利用爬蟲,就能夠實現簡單的定向抓取。

   二、爬蟲涉及到的python知識?

     爬蟲經歷三個步驟:首先向目標網頁發出請求,經伺服器返回一個響應html的源碼;然後通過beatifulsoup庫或者Xpath表達式來對源碼進行解析,提取有用信息;最後通過文件保存相關信息,進行數據清洗或分析。

      我們所需要的環境:IDE的話pycharm就好,個人認為這個是最好的pythonIDE,支持windows以及mac系統。當然你必須先在自己的電腦安裝python,具體安裝方法百度即可,在這個地方說明的是,python2.7是預設在mac上,不過用就用最新版的吧,python3和python2有區別的。直接用vim寫也可以。這裡需要使用谷歌瀏覽器分析源網頁html代碼。

   三、爬取豆瓣網的top250:

    開始之前需要瞭解谷歌瀏覽器的操作:

    直接在 更多 選擇工具的開發者工具,這裡可能需要用到html的知識,其實就是一些標簽,如<div>、<a>、<span>等等。(具體學習一下html吧!)然後,單擊右鍵選擇標題如《肖申克的救贖》,使用檢查命令。選擇檢查可以查看源碼可以在右側Elements裡面看到<span class="title">這個標簽,中間的中文就是我們需要爬取的電影名字。同樣我們還需要爬取的是評分,可以找到<span class="rating_num">這樣的標簽,當然你也可以爬取一句話評語。

    我用到requests庫,當然還有urllib這個庫也可以,這個比較繁瑣。pycharm中可以直接安裝,bash中使用pip3的指令。

    首先,我們需要向目標網頁發送下載請求:

    url='https://movie.douban.com/top250'

    res=requests.get(url)

    print(res.status_code)     

    這裡可能會有亂碼。因為你沒有定義下載的html代碼的編碼格式,在res後面附加一句:res.encoding='UTF-8',即可。同樣網站會有反爬措施,諸如過頻繁請求,或者限制,這是需要使用一個user-agent:就在network這個卡的最下麵,不過一般使用Mozilla/5.0就可以。定義一個頭文件:(複製粘貼就可以)

headers={
'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36',
'Host':'movie.douban.com'
}

              替換:res=requests.get(url,headers=headers)

              這個時候你的status_code就會是200,200表示正常反饋。400就是不正常。(反爬手段)

      當然你可以下載html代碼自己看看,不過挺雜亂。直接  print(res.text)  就行了。

     好了,已經獲得了網頁源碼,這個時候就該解析相關數據了:beatifulsoup實例化。

      soup=BeatifulSoup(res.text,'html.parser')  #建立soup對象。

      div_list=soup.find_all('div',class_='hd')  #這裡的div標簽在<li>標簽下麵,每一個<li>標簽都表示一部電影的信息。我們所需要的信息都存在<div class='hd'>里。

      for each in div_list:

      movie=each.find('a').find('span').text.strip()

      movie_list.append(movie)

       movie_list是一個空列表,專門存放電影名字。strip()函數是去除字元串兩端的字元,這裡是去除空格。但是我們發現,網頁貌似有10頁面,我們這裡利用for迴圈遍歷url。

url變化的只是最後一部分的:

     movie_list=[]

     for i in range(0,10):

        url='http://movie.douban.com/top250?start='+str(i*25)

        res=......

        soup=BeatifulSoup(res.text,'html.parser')

        div_list=soup.find_all('div',class_='hd')  

        for each in div_list:

          movie=each.find('a').find('span').text.strip()

          movie_list.append(movie)

      return movie_list

     這樣就可以了。簡單的爬蟲就完成了。    

       最後我們需要將取得的數據存儲。你也可以選擇存進mysql,具體涉及pymysql。

       file='desktop/douban.csv'

     with open(file,'w+') as f:

        f.write(movie_list)

        f.close()

       csv用文本編輯器打開。也可用excle打開具體百度。      

      

      

      

  

    

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文只是記錄fastjson、jackson一些常用的操作方法,沒作比較,網上寫比較的文章很多啦。 1、對象轉Json串 2、Json串轉Json對象 3、Json串轉Java對象 4、獲取Json對象的key 5、獲取Json對象的value 6、創建一Json對象並設置key\value 在這點 ...
  • 已經記不清有多少讀者問過: 博主,你是怎麼學習的?像我這樣的情況有啥好的建議嘛? 也不知道啥時候我居然成人生導師了。當然我不排斥這些問題,和大家交流都是學習的過程。 ...
  • 前言 基礎面向對象 靜態,單例模式,繼承詳情知識點。 關鍵字, 變數,靜態代碼塊,代碼塊(不加靜態),對象創建過程,單例模式,繼承。 靜態 static關鍵字 在以上的代碼中,我們會遇到這種情況,創建了一個對象,但是調用功能時,沒有調用到對象中的數據,那麼為啥還要調用呢?創建對象不就是為了封裝數據的 ...
  • get是通過URL傳參,容易暴露,容易被sql註入,防止sql註入的方式之一是:加intval($_GET['id']); ...
  • 最終效果:瀏覽器地址欄輸入www.baidu.com訪問時,會顯示自己的網頁 1、創建文件 任意盤新建一個www.baidu.com文件,在該文件夾下新建WEB-INF文件、自己寫的一個html文件,一張圖片,然後在WEB-INF下新建一個classes文件、lib文件以及一個web.xml文件,在 ...
  • 給定兩個有序整數數組 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序數組。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。 你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來保存 nums2 中的元素 ...
  • 又有時間寫東西了,最近深感世事並不以人的美好願望而改變,還是要以積極地心態來適應新變化,多多關心身邊的人。 圖釘畫中一個圖釘代表一個像素,所以關鍵在於像素渣化,降低解析度,圖釘的色彩有限,還需要降低圖片的色彩數量,統計各種色彩的數量及位置。 以上都可以用Pillow完成,Pillow是Python中 ...
  • 網路上兩台主機的交互 ①根據IP找到對方主機 ②數據發送到對方指定的應用程式上,為了表示這些應用程式,引入了埠的概念。 常用埠: wed埠80 MySQL埠3306 有效埠 0~65535 ③定義通信規則,稱為協議。國際組織定義了通用協議TCP/IP協議 本地迴環地址:127.0.0.1( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...