目錄
何為爬蟲,其實就是利用計算機模擬人對網頁的操作
例如 模擬人類瀏覽購物**
使用爬蟲前一定要看目標**可刑不可刑 :-)
可以在目標**新增/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當我沒說 知道了這兩點可以直接先去嘗試一下,並沒有想象...