用Python實現爬取百度熱搜資訊

2022-09-20 11:30:11 字數 2788 閱讀 8099

目錄

何為爬蟲,其實就是利用計算機模擬人對網頁的操作

例如 模擬人類瀏覽購物**

使用爬蟲前一定要看目標**可刑不可刑 :-)

可以在目標**新增/robots.txt 檢視網頁具體資訊

例如對天貓  可輸入   進行檢視

user-agent 代表傳送請求的物件

星號*代表任何搜尋引擎

disallow 代表不允許訪問的部分

/代表從根目錄開始

allow代表允許訪問的部分

在本例中 我爬取的百度熱搜前30的新聞(本人原本打算爬取英雄聯盟主頁 資料中心 大亂鬥勝率前五十的英雄資訊 奈何不會實現延時程式設計客棧爬取網頁的操作 無奈只能爬百度熱搜) 並且其大致資訊放到excel**以及flask網頁中實現資料視覺化  感興趣的同學也可以對其它內容進行爬取

由於本人水平有限 本文章中的爬蟲都是比較基礎的東西

python庫的安裝方法:

開啟cmd命令提示符輸入pip install ***(這個是你要裝的庫名稱)

關於這些庫的具體使用 可以接下來看我的操作 

只需要簡單掌握幾個常用的函式即可

bs4即beautifulsoup

用來解析html網頁,提取指定資料的。

其中詳細的用法待會看我的演示。

re正規表示式 用來匹配字串中響應的字串。

關於正規表示式 可以去看菜鳥教程 裡邊講的很詳細

urllib

是乙個python自帶的http請求庫,可以操作一系列url。

xlwt/xlrt

用於寫入(write) / 讀取(read),excel表中的資料。

flask

這個庫是用來只做乙個簡單的web框架即**,用於資料的視覺化。

其實本人對於資料視覺化的掌握也很淺薄,只是簡單的將資料匯入web網頁中。

jinja2

這個庫的作用是為了實現在html網頁中的字元中插入自變數的功能。

後端:name="hq"

前端:}長得真帥!

顯示:hq長得真帥!

markupsafe

與jinja共用 在渲染頁面時用於避免不可信的輸入,防止注入攻擊(雖然沒人會攻擊你....)

資料爬取和資料視覺化兩個py檔案是分開的

資料爬取需要匯入re bs4 urllib xlwt 四個庫檔案

使用一下的方法呼叫函式可以使函式呼叫關係更加清晰

if __name__=="__main__": #當程式執行時 呼叫一下函式

main()

def askurl(url):

head=

#使用者** 告訴伺服器我只是乙個普普通通的瀏覽器

requset=urllib.request.request(url)

#傳送請求

response=urllib.request.urlopen(requset)

#響應的為乙個request物件

#通過read()轉化為 bytes型別字串

#再通過decode()轉化為 str型別的字串

#接受響應

html=response.read().decode('utf-8')

將抓取到的網頁存入文件中 方便觀察

path=r"c:\users\***\desktop\python\text.txt"

#這裡在字串前加入r 防止字串中的\發生轉義

f=open(r"path",'w',e程式設計客棧ncoding='utf-8')

f.write(html)

f.close()

#這樣在txt檔案中就可以檢視網頁的原始碼

return html

headers的值可以在網頁中按f12

然後點選網路變化 對於任意乙個請求標頭 下拉到最下方即為 user-agent **資訊

值得注意的是  請求中如果不設定headers 則伺服器會返回乙個418的狀態碼

代表伺服器識別出來你是乙個爬蟲 並且表示:「 i'm a teapot 」

表明伺服器拒絕衝煮咖啡,因為它永遠是乙個茶壺(這是乙個梗)

將抓取的txt檔案字尾改為html後開啟即為乙個本地的網頁

如果在vscode中因為行過長而產生報錯 可以參考以下部落格

開啟後的網頁如圖所示

使用這個功能檢視需要爬取資訊的位置

在本專案中 我們抓取目標資訊的標題 內容 熱度 以及鏈結

我們可以發現 我們需要的資訊全部在class為以下型別的表中

於是我們用beautifulsoup對網頁進行解析

def getdata(html):

datalist=

soup=beautifulsoup(html,"html.parser") #定義乙個解析物件

#soup.find_all(a,b) 其中a為標籤的型別 class_ 對div的class進行匹配

#返回的是所有class為category-wrap_iqloo horizontal_1ekyq的列表

for item in soup.find_all('div',class_="category-wrap_iqloo horizontal_1ekyq"):

item=str(item)

#將列表中每乙個子標籤轉換為字串用於re匹配

接下來對每乙個item進行re匹配

首先使用re.compile()建立匹配規則 然後用findall進行匹配

匹配規則的建立方式為在html檔案中檢視目標資訊前後的特殊字元

而(.*?)即為要匹配的字串 其中*後加?代表非貪婪匹配

例如標題前後資訊即為ellipsis">和

爬取百度熱搜榜小案例

import requests from bs4 import beautifulsoup import time import csv import datetime 得到當前的時間 nowtime datetime.datetime.now strftime y m d h m s 建立列表儲存...

用python3爬取百度首頁

import urllib.request import urllib url html urllib.request.urlopen url content html.read decode utf 8 html text bytes.decode html.read print html tex...

用python爬取百度的搜尋結果

前幾天爬的今天整理了一下發現就兩個需要注意的點 一是記得用帶cookie的方式去訪問,也就是例項化requests.session 二是轉化一下爬取到的url,訪問爬到的url得到返回的location值,該值便是真實的位址 如果你不是要爬url當我沒說 知道了這兩點可以直接先去嘗試一下,並沒有想象...