騷話Python爬蟲入門,教你刷網課丶刷文章閱讀量丶刷刷刷。

走過路過不要錯過,學不會沒關係,長點見識也是可以的啦。

簡介

博主於17年開始自學的python, 期間做過各個領域的python開發,包括爬蟲, web, 硬件, 桌面應用, AI, 數據分析

可能有人會問python能做硬件開發?可自行搜索pyboard樹莓派MicroPython, 描述python最有精髓的一句話: python 除了不能生孩子, 啥都能幹。
在這裏插入圖片描述

通過該篇文章,讀者可以發現爬蟲入門並不難,還可以知道那些大學生網絡刷視頻課程的實現原理,以及搶票工具的實現原理,並且可以自己動手編寫一個簡單爬蟲。當然入門容易, 出來未並容易。
在這裏插入圖片描述
其實很多東西看似難,其實很容易,你覺得難的原因僅僅是因爲你不知道它的原理, 奉勸讀者學習的過程中多瞭解一下實現原理, 這也是我切身體會。
在這裏插入圖片描述

本質

  • 爬蟲是一種獲取網絡信息的腳本,方便幫助人們快速的丶大量的從網絡上的獲取一些信息。
  • 簡單地說,比如你在一個網站上看到很多壞壞的圖,你好喜歡,想下載下來,但是一個個點太費勁了,如果你是個妹子,或許能喊來一羣甜 dog幫你。
    在這裏插入圖片描述
  • 但是像博主這種沒人疼, 沒人愛單身dog, 只能靠自己的雙手了,三下五除二, 擼了一段代碼搞定,代碼如下:

























  • 代碼呢? 年輕人做事不能這麼着急,慢慢來嘛, 討厭心急吃不了熱豆腐

在這裏插入圖片描述

  • 緊接着,博主繼續闡述爬蟲的本質。上文說到爬蟲是自動化獲取網絡信息的腳本。, 那麼腳本操作的本質又是啥? 要知道腳本的操作本質,那麼得知道你操作瀏覽器時,人家瀏覽器是怎麼操作的,例如:
    • 當你點擊一個頁面的時候,客戶端瀏覽器向指定的服務器發送一個GET請求,服務端接受到該請求之後便會返回響應內容,客戶端瀏覽器接受到響應內容便會進行解析渲染,此時你就看到了頁面上的內容。這期間還涉及客戶端是如何找到服務端的(DNS協議), 客戶端跟服務端是如何通信的(TCP協議), 這兩個協議這裏就不作解析了,再說就超綱了,博主是一個正直的男人(單身,劃重點),違背倫理道德的事我不幹,可以自行和百度老師好好深入交流。

    • 當你想點讚我的文章時候,此時萬惡的瀏覽器告訴你(其實罪魁禍首是服務器端代碼),需要登錄,你拒絕登錄的話,那麼我就損失了一個贊,所以你還是行行好,登錄一下點贊吧, 你是個好人
      在這裏插入圖片描述
      在登錄的時候,發現你沒有註冊,不管註冊還是登錄,你需要在瀏覽器輸入賬號密碼(掃碼登錄), 當你操作完成之後點登錄,客戶端瀏覽器會向服務端發送一個POST請求進行操作,服務端會進行一系列的操作然後響應給客戶端,客戶端瀏覽器會彈出提示告訴你操作狀態(登錄成功, 或者失敗)。GET請求和POST請求有什麼不同? GET請求的內容實體會帶在網址的後面,POST請求的內容實體會帶在請求體裏面。還有XXX, 不告訴你(百度)。

    • 瞭解了請求的GETPOST,對於本篇文章已經夠用了(還有PUT,DELETE,OPTION), 如果想深入瞭解的可以百度搜索: 詳解HTTP請求 , 寫太深入就沒人看了。在這裏插入圖片描述

  • 網絡刷課,搶票軟件,刷文章訪問量等軟件的實現原理也是基於網絡請求的操作,只不過很多站點會增加一些反爬蟲機制,如ip限制,登錄加密,操作內容體加密,當然這些也是可以搞定的。

Python

也不知道我的讀者有沒有學過python, 甚至可能沒有學過編程,但是沒關係,很簡單的。
接下來,帶你如何快速入門python:





































由於一篇文章的篇幅有限, 請自行查找python入門教程, 如果覺得不夠,可以私信我寫。

本人就是網上悶騷男, 網下靦腆男
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200221120410615.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NsYXNzbWF0ZUxpbg==,size_16,color_FFFFFF,t_70

實戰

  • 各位看官,現在又到了緊張的實戰環節, 我狂鐵賊六,又狂又頭鐵, 進可一打五,退可六分投
    在這裏插入圖片描述

  • 首先介紹兩個Python的三方模塊requests, BeautifulSoup

    • requests是一個網絡請求庫,用於實現上文說到的GET, POST等請求,官方文檔點我
    • BeautifulSoup庫是一個網頁文本解析模塊,用於檢索我們需要的內容, 官方文檔點我
    • pip install requests, pip install BeautifulSoup4分別安裝這兩個包。
  • 入門教程從簡, 以一個鬥圖網的表情包套圖頁面爲例,實現該頁面下所有圖片的下載, 點我查看網頁

    • 先通過requests模塊獲取網頁文本數據:

      import requests #  導入模塊
      
      
      def get_html_text(url):  # 獲取html文本內容
          """
          獲取html文本
          :param url:
          :return:
          """
          return requests.get(url).text  # 這裏通過GET請求拿到返回的網頁文本內容
      
      
      if __name__ == '__main__':
          url = 'http://www.bbsnet.com/xiongmaoren-18.html'
          html_text = get_html_text(url)
          print(html_text)
      
      
      
    • 分析網頁結構,鼠標對準圖片,右鍵點檢查元素, 如圖:
      在這裏插入圖片描述
      在右圖中可以看到,所有的圖片均包含在id=post_content的div標籤裏面, 然後其下面是一些p標籤,img中src有圖片的鏈接,點進去可以直接看到一張圖片。
      在這裏插入圖片描述
      現在要做的事情,就是提取這些圖片鏈接,再通過GET請求和文件操作進行圖片的保存。

    • 用BeautifouSoup查找這些圖片的鏈接地址, 定義一個函數來完成這件事情:

      def get_images_urls(html_text):
          """
          獲取圖片鏈接
          :param html_text:
          :return:
          """
          urls = []   # 保存提取的url列表
          soup = BeautifulSoup(html_text, 'html.parser')  # 創建一個soup對象,可以打印出來看看裏面的內容
          div_tag = soup.find('div', {'id': 'post_content'})  # 查找id=post_content的標籤
          img_tag_list = div_tag.find_all_next('img')  # 查找div下面的所有img標籤
          for img_tag in img_tag_list[:-4]:  # 觀察找到結果發現從倒數第四個開始並不是表情包,所以只迭代到倒數第四個
              url = img_tag.attrs['src']   # 提取img標題的src元素的值
              urls.append(url)
          return urls
      
    • 然後需要定義一段代碼,來完成圖片的保存, 如下:

      def save_images(dir, urls):
          """
          保存圖片
          :param urls:
          :return:
          """
          if not os.path.exists(dir):  # 使用os模塊來判斷文件夾是否存在,不存在則創建
              os.makedirs(dir)
          count = 1
          
          for url in urls:
              print('正在下載第{}張圖片...'.format(str(count)))
              ext = url.split('.')[-1]  # 拿到圖片的擴展名 
              filename = dir + '/' + str(count) + '.' + ext  # 拼接圖片的存儲路徑
              content = requests.get(url).content  # 通過GET請求獲取圖片的二進制內容,注意拿網頁源碼時候是text
              with open(filename, 'wb') as f:  # 已寫二進制的形式打開文件
                  f.write(content)  # 將圖片內容寫入
              count += 1   # count 用於圖片命名和計數,遞增1
      
      
    • 代碼運行結果:
      在這裏插入圖片描述

    • 這時候就會有槓精說: 這一頁不就15個圖片嘛,我點幾下就完事了,寫個代碼時間還比較長時間。又或者有虛心向學者問: 怎樣爬取整個網站的圖片或者某一分類下所有的圖片。那麼已鬥圖表情包分類下的圖片爲例子, 參照之前講述的步驟, 看下網頁結構:
      在這裏插入圖片描述
      可以看到右側我圈紅的框內容包含了一些li標籤,li標籤對應的就算每一個封面圖, 我們要找到的就是藍錢畫出來的url,對應之前代碼的url, 只要我們把這些url都找出來,再調用我們之前的代碼就可以下載所有的圖片了, 當然這裏還涉及分頁, 分頁的操作方法也是一樣的,只要我們把下一頁的鏈接找出來,再進行訪問,直到找不到下一頁爲止。

    • 貼上爬取單個頁面的完整代碼,爬取分類的讀者自己琢磨怎麼去實現。

      # _*_coding:utf8_*_
      # Project: spider
      # File: main.py
      # Author: ClassmateLin
      # Email: [email protected]
      # 有項目的可以滴滴我, Python/Java/PHP/Go均可。WX: ClassmateYue
      # Time: 2020/2/21 4:54 下午
      # DESC:
      import requests
      import os
      from bs4 import BeautifulSoup
      
      
      def get_html_text(url):
          """
          獲取html文本
          :param url:
          :return:
          """
          return requests.get(url).text
      
      
      def get_images_urls(html_text):
          """
          獲取圖片鏈接
          :param html_text:
          :return:
          """
          urls = []   # 保存提取的url列表
          soup = BeautifulSoup(html_text, 'html.parser')  # 創建一個soup對象,可以打印出來看看裏面的內容
          div_tag = soup.find('div', {'id': 'post_content'})  # 查找id=post_content的標籤
          img_tag_list = div_tag.find_all_next('img')  # 查找div下面的所有img標籤
          for img_tag in img_tag_list[:-4]:  # 觀察找到結果發現從倒數第四個開始並不是表情包,所以只迭代到倒數第四個
              url = img_tag.attrs['src']   # 提取img標題的src元素的值
              urls.append(url)
          return urls
      
      
      def save_images(dir, urls):
          """
          保存圖片
          :param urls:
          :return:
          """
          if not os.path.exists(dir):  # 使用os模塊來判斷文件夾是否存在,不存在則創建
              os.makedirs(dir)
          count = 1
      
          for url in urls:
              print('正在下載第{}張圖片...'.format(str(count)))
              ext = url.split('.')[-1]  # 拿到圖片的擴展名
              filename = dir + '/' + str(count) + '.' + ext  # 拼接圖片的存儲路徑
              content = requests.get(url).content  # 通過GET請求獲取圖片的二進制內容,注意拿網頁源碼時候是text
              with open(filename, 'wb') as f:  # 已寫二進制的形式打開文件
                  f.write(content)  # 將圖片內容寫入
              count += 1   # count 用於圖片命名和計數,遞增1
      
      
      if __name__ == '__main__':
          url = 'http://www.bbsnet.com/xiongmaoren-18.html'
          html_text = get_html_text(url)
          image_urls = get_images_urls(html_text)
          save_images('./images', image_urls)
      
      

博客已遷移至, 這裏,快點我

說明

  • 讀完這篇文章,你應該對爬蟲有一定的瞭解了, 能夠舉一反三當然是最好了。
  • 本文示例的爬蟲是最簡單,沒有任何反爬蟲機制,想知道反爬蟲機制有哪些的,可以自行百度瞭解。
  • 本文示例爬蟲是html文本形式的解析,有些網站會用javascript動態生成網頁,直播彈幕的爬蟲需要分析websockt。
  • 網絡刷課丶搶票軟件及各種腳本的實現, 都是通過模擬這些網絡請求來進行操作的,只不過有些需要登錄丶或者有加密方式,app軟件爬蟲丶前後端分離站點需要對接口進行抓包分析。例如我Github上刷訪問量的代碼,點我查看
  • 爬蟲難點不在於實現,而是在於分析,只要你分析到位了,寫腳本就是簡簡單單的。
  • 這裏演示的是沒有采用框架的實現,有很多爬蟲框架使得爬蟲實現更爲容易, 如Scrapy。有些網站需要javascript動態生成網頁的,那麼可以用selenium庫來操作chrome等瀏覽器,實質上是爲了拿到html純文本進行數據的提取, 例如我Github這份代碼進行百度SEO使用的就算selenium庫,點我查看
  • 該實例實現的是單線程的,在數據量龐大的時候根本處理不過來,可以使用多線程丶多進程丶協程來進行操作。例如協程庫:aiohttp, 可以點擊參考我這篇文章
"""
# _*_coding:utf8_*_
在這裏順便給大家免費發點福利,
2020年最新python開發丶爬蟲丶數據分析等視頻教.程資料
+QQ羣 904474519 羣文件自己下載哦,還可跟老司機討論問題
"""
print("Hello World!")

Python騷操作,網賺資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章