封裝多個爬蟲

2021-08-22 19:46:39 字數 1922 閱讀 4208

#呼叫parse和request

from urllib import request,parse

#呼叫了兩種錯誤形式

#建立函式,路由,headers=none,headers預設為空

def get(url,headers=none):

#返回值呼叫下面的urlrequests函式

return urlrequests(url,headers=headers)

def post(url,form,headers=none):

# 返回值呼叫下面的urlrequests函式

return urlrequests(url,form,headers=headers)

#設定urlrequests函式,路由,form設定預設為空,headers預設為空

def urlrequests(url,form=none,headers=none):

#偽裝為瀏覽器訪問

#判斷,如果headers為空那麼執行此行**傳入user_agent,如果使用者自行傳入便覆蓋

if headers==none:

headers =

#建立byte型別儲存變數

html_bytes=b""

#用try檢測是否錯誤,如果不錯誤,那麼執行此**

try:

#判斷form是否為true,如果為rtue那麼執行此**

if form:

#由字典轉換為byte型別步驟,1.轉換為字串型別2.轉換為byte型別

#post型別

#將form字典轉換為str型別

form_str = parse.urlencode(form)

#將form_str 字串轉換成byte型別

form_bytes = form_str.encode('utf-8')

req = request.request(url,data=form_bytes,headers=headers)

#如果form不為true那麼執行此**

else:

#建立乙個request類來構建乙個請求

req = request.request(url,headers=headers)

# urlopen()方法可以實現最基本請求的發起

response = request.urlopen(req)

#讀取並把讀取到的內容給乙個新的變數

html_bytes = response.read()

#判斷是否有httprrror錯誤如果有執行此**

#輸出錯誤

print(e)

#判斷是否有urlerror錯誤如果有執行此**

except urlerror as e:

# 輸出錯誤

print(e)

#返回 html_bytes,此時此變數的型別為byte型別

return html_bytes

if __name__=='__main__':

#輸入路由

# url = ''

#輸入要查的字典內容

# form =

#post是自定義的函式,傳送值到post函式

# html_bytes = post(url, form=form)

# print(html_bytes)

url = ''

#get是自定義的函式,傳送值到get函式裡

html_byte=get(url)

print(html_byte)

#相關筆記

#data引數如果要傳必須傳bytes(位元組流)型別的,如果是乙個字典,先用urllib.parse.urlencode()編碼。

封裝函式爬蟲

分析貼吧的url規律。第1頁 pn 0 第2頁 pn 50 第3頁 pn 100 pn是控制頁碼的。著重關注 封裝的思路。from urllib import request,parse import osimport ssl 解決ssl證書問題 處理url,返回request def handle...

C 封裝多個執行緒

今天專案需要同時通過tcp讀取六個外接裝置傳送的資料,如果把執行緒重複寫六次,就感覺 太多重複內容了,就想能不能將執行緒變成類似類的樣子,然後生成六個 執行緒類 的物件,然後將物件加入list中 如下 示例 我前面已經建立了乙個public static dictionarysockets 裡面存放...

Scrapy 執行多個爬蟲

本文所使用的 scrapy 版本 scrapy 1.8.0 多個爬蟲 所有爬蟲 顯然,這兩種情況並不一定是等同的。假設當前專案下有 3 個爬蟲,分別名為 route dining experience,並在專案目錄下建立乙個main.py檔案,下面的示例 都寫在這個檔案中,專案執行時,在命令列下執行...