Python爬蟲實踐,獲取百度貼吧內容

来源:https://www.cnblogs.com/chengxuyuanaa/archive/2020/03/17/12513637.html
-Advertisement-
Play Games

經過前期大量的學習與準備,我們重要要開始寫第一個真正意義上的爬蟲了。本次我們要爬取的網站是:百度貼吧,一個非常適合新人練手的地方,那麼讓我們開始吧。 本次要爬的貼吧是<< 西部世界 >>,西部世界是我一直很喜歡的一部美劇,平時有空也會去看看吧友們都在聊些什麼。所以這次選取這個吧來作為實驗材料。註意: ...


 

經過前期大量的學習與準備,我們重要要開始寫第一個真正意義上的爬蟲了。本次我們要爬取的網站是:百度貼吧,一個非常適合新人練手的地方,那麼讓我們開始吧。

本次要爬的貼吧是<< 西部世界 >>,西部世界是我一直很喜歡的一部美劇,平時有空也會去看看吧友們都在聊些什麼。所以這次選取這個吧來作為實驗材料。註意:很多人學Python過程中會遇到各種煩惱問題,沒有人解答容易放棄。為此小編建了個Python全棧免費解答.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決裡面還有免非最新Python教程下載,,一起相互監督共同進步!

貼吧地址 :
https://tieba.baidu.com/f?kw=%E8%A5%BF%E9%83%A8%E4%B8%96%E7%95%8C&ie=utf-8

Python版本 : 3.6
瀏覽器版本: Chrome

目標分析:

由於是第一個實驗性質爬蟲,我們要做的不多,我們需要做的就是:

1、從網上爬下特定頁碼的網頁
2、對於爬下的頁面內容進行簡單的篩選分析
3、找到每一篇帖子的 標題、發帖人、日期、樓層、以及跳轉鏈接
4、將結果保存到文本。

前期準備:
看到貼吧的url地址是不是覺得很亂?有那一大串認不得的字元?

其實這些都是中文字元,
%E8%A5%BF%E9%83%A8%E4%B8%96%E7%95%8C

在編碼之後就是: 西部世界。

鏈接的末尾處:&ie=utf-8 表示該連接採用的是utf-8編碼。

windows的預設編碼是GBK,在處理這個連接的時候,需要我們在Python里手動設置一下,才能夠成功使用。

Python3相對於Python2對於編碼的支持有了很大的提升,預設全局採用utf-8編碼,所以建議還在學Python2的小伙伴趕緊投入Python3的懷抱,真的省了老大的功夫了。

接著我們翻到貼吧的第二頁:

url:

`url: https://tieba.baidu.com/f?kw=%E8%A5%BF%E9%83%A8%E4%B8%96%E7%95%8C&ie=utf-8&pn=50`

註意到沒有,連接的末尾處多了一個參數&pn=50,
這裡我們很容易就能猜到,這個參數的與頁碼的聯繫:

  • &pn=0 : 首頁
  • &pn=50: 第二頁
  • &pn=100:第三頁
  • &pn=50*n 第n頁
  • 50 表示 每一頁都有50篇帖子。

這下我們就能通過簡單的url修改,達到翻頁的效果了。

chrome開發人員工具的使用:

要寫爬蟲,我們一定要會使用開發工具,說起來這個工具是給前段開發人員用的,但是我們可以通過它快速定位我們要爬取的信息,並找到相對應的規律。

  • 按cmmand+option+I 打開chrome工具,(win可以看按F12或者手動在chrome工具欄里打開)
  image
  • 使用模擬點擊工具快速定位到一個單獨帖子的位置。(左上角的滑鼠箭頭圖標)
  image

我們仔細的觀察一下,發現每個帖子的內容都包裹在一個li標簽內:

<li class=" j_thread_list clearfix">

這樣我們只要快速找出所有的符合規則的標簽,

在進一步分析裡面的內容,最後篩選出數據就可以了。

開始寫代碼吧?

我們先寫出抓取頁面內人的函數:

這是前面介紹過的爬取框架,以後我們會經常用到。

import requests 
from bs4 import BeautifulSoup
    
# 首先我們寫好抓取網頁的函數
def get_html(url):
    try:
        r = requests.get(url,timeout=30)
        r.raise_for_status()
        #這裡我們知道百度貼吧的編碼是utf-8,所以手動設置的。爬去其他的頁面時建議使用:
        # r.endcodding = r.apparent_endconding 
        r.encoding='utf-8'
        return r.text
    except:
        return " ERROR "

接著我們摘取其中的詳細信息:

  • 我們來分一下每一個li標簽內部的結構:

一個大的li標簽內包裹著很多個 div標簽

而我們要的信息就在這一個個div標簽之內:

# 標題&帖子鏈接
<a rel="noreferrer" href="/p/5803134498" title="【高淸】西部世界1-2季,中英字,未❗️刪❕減.

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

-Advertisement-
Play Games
更多相關文章
  • 本文存在[視頻版本][1],請知悉 項目簡介 項目來源於: "https://gitee.com/thuihuang/shine_bookshop" 一個基於 JSP+Servlet+Jdbc 的shine網上書城。涉及技術少,易於理解,適合 JavaWeb初學者 學習使用。 技術棧 編輯器 Ecl ...
  • 有一個這樣的問題:現要用 setuptools 把一個項目打包成 whl 文件,然後 pip install 在 Windows/Linux 兩種操作系統上,但是該項目中有一些依賴庫只有 Windows 上才有(例如 pywinauto、pywingui、pywinrm),那麼問題是,如何實現打包文 ...
  • 基於S2SH開發線上學堂系統(課程學習網站 前臺+後臺) 開發環境: Windows操作系統開發工具:Eclipse+Jdk+Tomcat+MYSQL資料庫運行效果圖 源碼及原文鏈接:https://javadao.xyz/forum.php?mod=viewthread&tid=97 ...
  • Maven項目打包時,如果遇到需要添加本地jar包依賴的時候,可以選擇兩種方法: 1. 安裝到本地倉庫 第一種方法比較常規,適用於需要添加的jar包也是由maven項目導出,含有pom文件的時候。只需要將jar包安裝到本地maven倉庫下,然後添加依賴即可。 (1)安裝到本地倉庫,執行以下命令(其中 ...
  • Spring Boot為廣大開發人員提供了便利。 本文將介紹如何編寫Starter,以便開發人員復用自己或項目組的代碼。 代碼下載地址:https://gitee.com/jxd134/Spring Boot Greeter Starter.git 1 新建項目 項目基於Maven構建,包含以下三個 ...
  • 題目: 代碼及思路: #include <stdio.h> #include <string.h> int main() { //以字元串的形式接受用戶輸入的數字 char str[1000]; //定義一個統計數組 int nums1[10] = {0}; scanf("%s", str); // ...
  • 什麼是微服務?什麼是SpringCloud? 微服務是一種架構的模式,它提倡將一個應用程式劃分成很多個微小的服務,服務與服務之間相互協調、相互配合。每個服務運行都是一個獨立的進程,服務與服務之間採用輕量級的通訊機制相互溝通。簡單的來說就是將一個龐大的複雜的單體應用進行劃分成n多個微小的服務(一個服務 ...
  • 一、Servlet簡介 1.1、Servlet是sun公司提供的一門用於開發動態web資源的技術,Servlet屬於動態資源。 1.2、Servlet(Server Applet)是Java Servlet的簡稱,Servlet就是一個運行在伺服器端的Java類。 1.3、Servlet就是Java ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...