Python網絡爬蟲實戰(一)快速入門

2021-02-19 肥宅與畫家

    本系列從零開始闡述如何編寫Python網絡爬蟲,以及網絡爬蟲中容易遇到的問題,比如具有反爬,加密的網站,還有爬蟲拿不到數據,以及登錄驗證等問題,會伴隨大量網站的爬蟲實戰來進行。

    不管你是學習Java爬蟲還是Python爬蟲,都可以從中學到爬蟲的編碼思想。

    我們編寫網絡爬蟲最主要的目的是爬取想要的數據,通過爬蟲去自動完成我們想在網站中做的一些事情。

    從今天開始我會從基礎開始講解如何通過網絡爬蟲去完成你想要做的事。先來看一段簡單的代碼。

import requests url = 'https://www.cnblogs.com/LexMoon/'strhtml = requests.get(url) print(strhtml.text)

    首先是import requests來導入網絡請求相關的包,然後定義一個字符串url也就是目標網頁,之後我們就要用導入的requests包來請求這個網頁的內容。

    這裡用了requests.get(url),這個get並不是拿取的那個get,而是一種關於網絡請求的方法。網絡請求的方法有很多,最常見的有get,post,其它如put,delete你幾乎不會見到。requests.get(url)就是向url這個網頁發送get請求(request),然後會返回一個結果,也就是這次請求的響應信息。 

    響應信息中分為響應頭和響應內容。 

    

    響應頭就是你這次訪問是不是成功了,返回給你的是什麼類型的數據,還有很多一些。 

    響應內容中就是你獲得的網頁源碼了。

    好了,這樣你就算是入門Python爬蟲了,但是還是有很多問題。 

1. get和post請求有什麼區別?  

2. 為什麼有些網頁我爬取到了,裡面卻沒有我想要的數據? 

3. 為什麼有些網站我爬下來的內容和我真實看到的網站內容不一樣? 

    get和post的區別主要在於參數的位置,比如說有一個需要登錄用戶的網站,當我們點擊登錄之後,帳號密碼應該放在哪裡。

    get請求最直觀的體現就是請求的參數就放在了URL中。

    比如說你百度Python這個關鍵字,就可以發現它的URL如下:

https://www.baidu.com/s?wd=Python&rsv_spt=1

    這裡面的dw=Python就是參數之一了,get請求的參數用?開始,用&分隔。

    在post請求中,參數會放在請求體內。 

    

    比如說下面是我登錄W3C網站時的請求,可以看到Request Method是post方式。

    在請求的下面還有我們發送的登錄信息,裡面就是加密過後的帳號密碼,發送給對方伺服器來檢驗的。

    另一個問題是我們的爬蟲有時候可能爬下來一個網站,在查看裡面數據的時候會發現,爬下來的是目標網頁,但是裡面我們想要的數據卻沒有。

    這個問題大多數發生在目標數據是那些列表型的網頁,比如說前幾天班上一個同學問了我一個問題,他在爬攜程的航班信息時,爬下來的網頁除了獲得不了航班的信息,其他地方都可以拿到。

網頁地址:

https://flights.ctrip.com/itinerary/oneway/cgq-bjs?date=2019-09-14

如下圖:

    這是一個很常見的問題,因為他requests.get的時候,是去get的上面我放的那個URL地址,但是這個網頁雖然是這個地址,但是他裡面的數據卻不是這個地址。

    聽起來很像很難,但是從攜程這個網站的設計人的角度來說,加載的這部分航班列表信息可能很龐大,如果你是直接放在這個網頁裡面,我們用戶打開這個網頁可能需要很久,以至於認為網頁掛了然後關閉,所以設計者在這個URL請求中只放了主體框架,讓用戶很快進入網頁中,而主要的航班數據則是之後再加載,這樣用戶就不會因為等待很長時間而退出了。

    

    說到底怎麼做是為了用戶體驗,那麼我們應該怎麼解決這個問題呢?如果你學過前端,你應該知道Ajax異步請求,不知道也沒事,畢竟我們這裡不是在說前端技術。我們只需要知道我們最開始請求的https://flights.ctrip.com/itinerary/oneway/cgq-bjs?date=2019-09-14  這個網頁中有一段js腳本,在這個網頁請求到之後會去執行,而這段腳本的目的就是去請求我們要爬的航班信息。

    這時候我們可以打開瀏覽器的控制臺,推薦使用谷歌或者火狐瀏覽器,按F進入坦克,不,按F12進入瀏覽器控制臺,然後點擊NetWork。

    在這裡我們就可以看到這個網頁中發生的所有網絡請求和響應了。

    在這裡面我們可以找到請求航班信息的其實是https://flights.ctrip.com/itinerary/api/12808/products  這個URL。

    最後一個問題就是為什麼有些網站我爬下來的內容和我真實看到的網站內容不一樣? 

    這個的主要原因是,你的爬蟲沒有登錄。就像我們平常瀏覽網頁,有些信息需要登錄才能訪問,爬蟲也是如此。這就涉及到了一個很重要的概念,我們的平常觀看網頁是基於Http請求的,而Http是一種無狀態的請求。 

    什麼是無狀態?你可以理解為它不認人,也就是說你的請求到了對方伺服器那裡,對方伺服器是不知道你到底是誰。 

    既然如此,我們登錄之後為什麼還可以長時間繼續訪問這個網頁呢?這是因為Http雖然是無狀態的,但是對方伺服器卻給我們安排了身份證,也就是cookie。在我們第一次進入這個網頁時,如果之前沒有訪問過,伺服器就會給我們一個cookie,之後我們在這個網頁上的任何請求操作,都要把cookie放進去。這樣伺服器就可以根據cookie來辨識我們是誰了。

    比如知乎裡面就可以找到相關的cookie。

    對於這類網站,我們直接從瀏覽器中拿到已有的cookie放進代碼中使用,requests.get(url,cookies="aidnwinfawinf"),也可以讓爬蟲去模擬登錄這個網站來拿到cookie。

掃碼關注我

相關焦點

  • 如何快速學會Python爬蟲(入門篇)
    一、爬蟲入門Python爬蟲入門一之綜述2.Python爬蟲入門二之爬蟲基礎了解3. Python爬蟲入門三之Urllib庫的基本使用4. Python爬蟲入門四之Urllib庫的高級用法5. Python爬蟲入門五之URLError異常處理6.
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    ,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐 總目錄 零基礎全能篇(4套課程) 實用編程技巧進價(1套課程) 數據分析與挖掘(8套課程) 辦公自動化(3套課程) 機器學習與人工智慧(7套課程) 開發實戰篇(4套課程) 量化投資(2套課程) 網絡爬蟲(
  • 一小時入門 Python 3 網絡爬蟲
    作者:Jack-Cui,熱愛技術分享,活躍於 CSDN 和知乎,開設的《Python3網絡爬蟲入門》、《Python3機器學習》等專欄受到好評。 聲明:本文講解的實戰內容,均僅用於學習交流,請勿用於任何商業用途!
  • 從零開始的python爬蟲速成指南
    小夥伴感興趣可以自取~此外,我這還有兩本比較經典的python爬蟲電子書,在微信公眾號【輪子工廠】後臺回復 」爬蟲」 可以領取。進入正題:對於入門的小夥伴,首先需要解決四個問題:熟悉Python編程;了解HTML;了解網絡爬蟲的基本原理;學習使用Python爬蟲庫.
  • 適合新手學習的Python爬蟲書籍
    本書是一本針對所有層次的Python讀者而作的Python入門書。第一部分重點介紹網絡數據採集的基本原理:如何用Python從網絡伺服器請求信息,如何對伺服器的響應進行基本處理,以及如何以自動化手段與網站進行交互。第二部分介紹如何用網絡爬蟲測試網站,自動化處理,以及如何通過更多的方式接入網絡。精通Python網絡爬蟲:核心技術、框架與項目實戰
  • 2020重磅升級「Python數據科學入門與網絡爬蟲案例實戰研討會」
    Python作為一門面向對象的程式語言,簡潔的語法使得編寫十幾行代碼即可實現爬蟲功能,獲取海量網際網路數據。使用Python來編寫爬蟲實現簡單且效率高,同時爬取的數據可以使用Python強大的第三方數據處理庫來進行分析,最重要的是學習成本低,如此之好的東西怎能不學習呢?
  • Python開發簡單爬蟲【學習資料總結】
    一、簡單爬蟲架構 開發爬蟲步驟 python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例)
  • python如何快速入門
    昨天有同學私信我,說看了機器學習的東西,但是不懂python,也不知道怎麼入門,打算介紹一下思路給同學參考一下。首先,要連接python是什麼?可以做什麼?目前有什麼場景?目前,puthon主要有機器學習,數據處理,爬蟲,圖像處理,工業控制,文本處理,工具開發等,確定好方向後就開始學習。小編建議往機器學習發展,可以參考我的文章
  • Python爬蟲入門教程:超級簡單的Python爬蟲教程
    這是一篇詳細介紹 Python 爬蟲入門的教程,從實戰出發,適合初學者。讀者只需在閱讀過程緊跟文章思路,理清相應的實現代碼,30 分鐘即可學會編寫簡單的 Python 爬蟲。關於爬蟲的合法性幾乎每一個網站都有一個名為 robots.txt 的文檔,當然也有部分網站沒有設定 robots.txt。對於沒有設定 robots.txt 的網站可以通過網絡爬蟲獲取沒有口令加密的數據,也就是該網站所有頁面數據都可以爬取。
  • 2018年6月份Python網絡爬蟲與文本挖掘
    ,要在短時間內獲取大量信息,網絡爬蟲無疑是一種最適合的方法。通過爬蟲獲取的海量信息,我們可以對其進行進一步的分析:市場預測、文本分析、機器學習方法等。 Python作為一門腳本語言,它靈活、易用、易學、適用場景多,實現程序快捷便利,早已經成為程式設計師們的一門編程利器。Python這門程式語言包羅萬象,可以說掌握了python,除了一些特殊環境和高度的性能要求,你可以用它做任何事。
  • Python 爬蟲入門
    一、Python 開發環境的搭建 Python 目前流行 Python 2.x 與 Python 3.x 兩個版本,由於 Python 2 只會維護到 2020 年,因此這裡建議使用 python 3 來作為編程環境。
  • python爬蟲入門實戰!爬取博客文章標題和連結!
    最近有小夥伴和我留言想學python爬蟲,那麼就搞起來吧。準備階段爬蟲有什麼用呢?舉個最簡單的小例子,你需要《戰狼2》的所有豆瓣影評。最先想的做法可能是打開瀏覽器,進入該網站,找到評論,一個一個複製到文本中,保存,翻頁,接著複製,直到翻到最後一頁。
  • 從零開始的 Python 爬蟲速成指南,10篇 Python 技術熱文
    其中有基礎知識,爬蟲項目實戰,資料庫,web開發等。註:以下文章,點擊標題即可閱讀《從零開始的 Python 爬蟲速成指南》本文主要內容為以最短的時間寫一個最簡單的爬蟲,可以抓取論壇的帖子標題和帖子內容等。
  • python爬蟲-- Scrapy入門
    前言轉行做python程式設計師已經有三個月了,這三個月用Scrapy爬蟲框架寫了兩百多個爬蟲,不能說精通了Scrapy,但是已經對Scrapy有了一定的熟悉
  • 入門Python, 看這些資料就夠了
    要入門Python,資料並非越多越好, 基本上看這些資料就夠了。 。目錄:第一部分: Python入門&進階教程第二部分: Python Web框架第三部分: Python擴展資料推薦的學習路徑: 1. 使用實驗樓的開箱即用環境快速刷完Python3簡明教程,django基礎教程;2.
  • 10個Python爬蟲入門實例
    來源:cnblogs.com/h3zh1/p/12548946.html昨天帶夥伴們學習python
  • 《Python3網絡爬蟲開發實戰》:0基礎小白的入門級別教科書
    1、Web開發方向2、數據分析方向3、科學計算方向4、AI的機器學習方向5、AI的計算機視覺方向6、網絡爬蟲方向對於不從事編程、AI崗位的職場人士,我個人比較推薦大家學習一下數據分析跟網絡爬蟲。主要是學習網絡爬蟲,等你學完這部分,還有興趣再繼續學數據分析,是一個很不錯的選擇。
  • 「Python爬蟲與文本實例技術與應用」培訓班通知
    各科研院所單位:    隨著網際網路的發展,網絡信息呈現指數式增長,要在短時間內獲取大量信息,網絡爬蟲無疑是一種最適合的方法。
  • Python爬蟲實戰教程——爬取xkcd漫畫
    0 前言Python版本:3.7.0開發工具:IDLE(Python 3.7 64-bit)、Google Chrome1 網絡爬蟲(web crawler)?網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人),是一種按照一定的規則,自動地抓取網絡信息的程序或者腳本。
  • 資料|精通 Python 網絡爬蟲:核心技術、框架與項目實戰
    from=leiphonecolumn_res0731為什麼寫這本書 · · · · · ·網絡爬蟲其實很早就出現了,最開始網絡爬蟲主要應用在各種搜尋引擎中。在搜尋引擎中,主要使用通用網絡爬蟲對網頁進行爬取及存儲。