乙個入門級python爬蟲教程詳解

2022-09-28 21:57:27 字數 2551 閱讀 7019

爬蟲的定義:定向抓取網際網路內容(大部分為網頁)、並進行自動化資料處理的程式。主要用於對鬆散的海量資訊進行收集和結構化處理,為資料分析和挖掘提供原材料。

今日t條就是乙隻巨大的「爬蟲」。

爬蟲由url庫、採集器、解析器組成。

如果待爬取的url庫不為空,採集器會自動爬取相關內容,並將結果給到解析器,解析器提取目標內容後進行寫入檔案或入庫等操作。

第一步:寫乙個採集器

如下是乙個比較簡單的採集器函式。需要用到requests庫。

首先,構造乙個http的header,裡面有瀏覽器和作業系統等資訊。如果沒有這個偽造的header,可能會被目標**的waf等防護裝置識別為機器**並乾掉。

然後,用requests庫的get方法獲取url內容。如果http響應**是200 ok,說明頁面訪問正常,將該函式返回值設定為文字形式的html**內容。

如果響應**不是200 ok,說明頁面不能正常訪問,將函式返回值設定為特殊字串或**。

import requests

def get_page(url):

headers =

response = requests.get(url, headers= headers)

if response.status_code == 200:

return response.text

else:

return 'get html error !'

第二步:解析器

解析器的作用是對採集器返回的html**進行過濾篩選,提取需要的內容。

作為乙個14年忠實使用者,當然要用豆瓣舉個栗子 _

我們計畫爬取豆瓣排名top250電影的8個引數:排名、電影url鏈結、電影名稱、導演、上映年份、國家、影片型別、評分。整理成字典並寫入文字檔案。

待爬取的頁面如下,每個頁面包括25部電影,共計10個頁面。

在這裡,必須要表揚豆瓣的前端工程師們,html標籤程式設計客棧排版非常工整具有層次,非常便於資訊提取。

下面是「肖申克的救贖」所對應的html程式設計客棧**:(需要提取的8個引數用紅線標註)

根據上面的html編寫解析器函式,提取8個字段。該函式返回值是乙個可迭代的序列。

我個人喜歡用re(正規表示式)提取內容。8個(.*?)分別對應需要提取的字段。

import re

def parse_page(html):

pattern = re.compile('(.*?).*?.*?(.*?).*?.*?(.*?) .*?

(.*?) / (.*?) / (.*?)

.*?(.*?)' , re.s)

items = re.findall(pattern , html)

for item in items:

yield

提取後的內容如下:

整理成完整的**:(暫不考慮容錯)

import requests

import re

import json

def get_page(url):

#採集器函式

headers =

response = requests.get(url, headers= headers)

if response.status_code == 200:

return response.text

else:

return 'get html error ! '

def parse_page(html):

#解析器函式

pattern = 程式設計客棧re.compile('(.*?).*?.*?(.*?).*?.*?(.*?) .*?

(.*?) / (.*?) / (.*?)

.*?(.*?)' , re.s)

items = re.findall(pattern , html)

for item in items:

yield

def write_to_file(content):

#寫入檔案函式

with open('result.txt' , 'a' , encoding = 'utf-8') as file:

file.write(json.dumps(content , ensure_ascii = false) + '\n')

if __name__== "__main__":

# 主程式

for i in range(10):

url= ''+ str(i*25)+ '&filter'

for res in parse_page(get_page(url)):

write_to_file(res)

非常簡潔,非常符合python簡單、高效的特點。

說明:需要掌握待爬取url的規律,才能利用for迴圈等操作自動化處理。

前25部影片的url是0&filter,第26-50部影片url是25&filter。規律就在start引數,將start依次設定為0、25、50、75。。。225,就能獲取所有頁面的鏈結。parse_page函式的返回值是乙個可迭代序列,可以理解為字典的集合。執行完成後,會在程式同目錄生成result.txt檔案。內容如下:

乙個簡單的入門級Python爬蟲

乙個簡易爬蟲,主要功能是爬取全國各地空氣質素資料,輸出到乙個csv檔案,後續加入相關資料處理得出實時空氣質素排名前10和後10的城市及其空氣質素 aqi 使用的是beautifulsoup庫,具體用法參照 import requests from bs4 import beautifulsoup i...

入門級新聞爬蟲

專案需求分析 專案目標 鏈得得 金色財經 巴位元 爬蟲目標分析 爬蟲儲存結構 資料庫 id 唯一標識 spider time 採集時間 news img 新聞原首頁圖 news title 新聞原標題 news author 作者 news time 發布時間 可能需要增加乙個本地發布時間 news...

go 入門級 乙個http服務

servemux 是go自帶的http請求處理器,是乙個路由表,存放key value。根據請求路徑 key 在路由表中查詢,按照最長匹配原則 並將請求交給對應的處理函式 value 匯入http包,介紹幾個方法 http.listenandserve addr string,handler han...