爬蟲(持續更新ing)

爬蟲(持續更新ing)

# 網絡請求
# url統一資源定位符(如:https://www.baidu.com)
# 請求過程:客戶端的web瀏覽器向服務器發起請求
# 請求又分為四部分:請求網址,請求方法(get、post、put等),請求頭,請求體
# 瀏覽器中一般都在f12中去看,推薦谷歌會清晰一點
# 爬蟲概念:模擬瀏覽器發送請求獲取響應
# 反爬概念:保護重要數據,阻止惡意網絡攻擊
# 反反爬:針對反爬做防御措施
# 爬蟲的作用:1、數據采集 2、軟件測試 3、搶票 4、網絡安全 5、web漏洞掃描
# 通過爬取網站的數量分類:通用爬蟲(如搜索引擎)、聚焦爬蟲(如12306搶票)就是專門爬某個網站的數據, 通用爬蟲爬取網站數量沒有上線,聚焦爬蟲:爬取網站數量有限,有明確目標
# 聚焦爬蟲根據獲取數據為目的分類:功能性爬蟲、數據增量爬蟲 功能性爬蟲不獲取數據,只為了實現某種功能,如投票、搶票、短信轟炸等 數據增量爬蟲獲取數據用于后續分析,url與數據同時變化,則整條新數據,url不變,數據變化,數據部分更新
# 爬蟲基本流程:url->對url發送網絡請求,獲取瀏覽器的請求響應->解析響應,提取數據->保存數據
# robots協議,有些時候無法獲取時,可以修改robots# 網絡通信
# 瀏覽器:url
# DNS服務器:ip地址標注服務器
# DNS服務器返回ip地址給瀏覽器
# 瀏覽器拿到ip地址去訪問服務器,返回響應
# 服務器返回的數據可能是js,hmtl,jpg等等
# 網絡通信的實際原理:一個請求對一個數據包(文件)
# 之后抓包可能會有很多個數據包,共同組成了這個頁面# http協議和https協議
# http協議規定了服務器和客戶端互相通信的規則
# http協議:超文本傳輸協議,默認端口80
# 超文本:不僅僅限于文本,還可以是圖片、音頻、視頻
# 傳輸協議:使用共用約定的固定格式來傳遞換成字符串的超文本內容
# https協議:http+ssl(安全套接字層) 默認端口443
# ssl對傳輸內容進行加密
# https比http更安全,但是性能更低
# http請求/響應的步驟:1、客戶端連接web服務器 2、發送http請求 3、服務器接收請求返回響應 4、釋放連接tcp連接 5、客戶端解析html內容# 請求頭
# 請求方式 get/post、put等
# get一般來說都是想服務器要數據的詳情接口,而post一般是給服務器數據,提交接口
# user-agent:這個是模擬正常用戶的操作關鍵	
# cookies:這個是登錄保持,一般老一點的網站用這個,新的都用token
# referer:當前這一次請求是從哪個請求過來的

request模塊

# 依賴安裝 pip install requests
# 文本,html,css等字符串形式
import requests
url='https://www.baidu.com'
res=requests.get(url)
# text 這個方式內容會亂碼,str類型,request模塊自動根據http頭部對響應編碼做出有根據的推測
# res.encoding='utf-8' 當然你也可以指定編碼類型
# print(res.text) 
# content bytes類型,可以通過decode進行解碼 打印響應,這個是解碼后的,默認進行utf-8
print(res.content.decode())
# 這個就是把這個內容保存為html
# with open('baidu.html','w',encoding='utf-8') as h:
#     h.write(res.content.decode())
#輸出 這樣就把所有的https://www.baidu.com請求拿到了
# 打印響應的url
print('url',res.url)
# 打印響應對象的請求頭
print('request headers',res.request.headers)
# 打印響應頭
print('res headers',res.headers)# 圖片 把圖片存到img下面
import requests
url='https://www.baidu.com/img/flexible/logo/pc/result.png'
res=requests.get(url)
with open('./img/jwq.png','wb') as img:img.write(res.content)# 模擬瀏覽器發送請求
import requests
url='https://www.baidu.com'
# 構建請求頭 user-agent添加的目的是為了讓服務器認為我們是瀏覽器發送的請求,而不是爬蟲軟件
headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}
# headers參數接收字典形式的請求頭
res=requests.get(url,headers=headers)
print(res.content.decode())
print(len(res.content.decode())) #查看這個響應內容的長度
print(res.request.headers) #查看響應對象的請求頭# user-agent池 為了防止反爬
# 先演示手動添加的user_agents池
import requests
import random
url='https://www.baidu.com'
# 構建 user_agents池
user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60','Opera/8.0 (Windows NT 5.1; U; en)','Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0','Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2 ','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0) ',
]
ua=random.choice(user_agents)
# 構建請求頭 user-agent添加的目的是為了讓服務器認為我們是瀏覽器發送的請求,而不是爬蟲軟件
headers={'user-agent':ua
}
# headers參數接收字典形式的請求頭
res=requests.get(url,headers=headers)
# print(res.content.decode())
print(len(res.content.decode()))
print(res.request.headers)# 使用三方庫 fake-useragent
# 安裝 pip install fake-useragent
from fake_useragent import UserAgent
# 構建 user_agents池
ua = UserAgent()
# 獲取隨機瀏覽器用戶代理字符串
print(ua.random)# 使用param攜帶參數 quote 明文轉密文 unquote 密文轉明文
import requests
from fake_useragent import UserAgent
from urllib.parse import quote,unquote
# quote 明文轉密文
# unquote 密文轉明文
# print(quote('學習'))
# print(unquote('%E5%AD%A6%E4%B9%A0'))
# 構建 user_agents池
ua = UserAgent()
url='https://www.baidu.com/s'
# 你要是不想使用params的話,你可以使用模板語法
# url=f'https://www.baidu.com/s?wd={name}'
#構建請求參數
name=input('請輸入關鍵詞:')
params={'wd':name
}
headers={'user-agent':ua.random
}
# 通過params攜帶參數
res=requests.get(url,headers=headers,params=params)
print(res.content.decode())# 獲取網易云的圖片
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://p1.music.126.net/_JcHT6u-TYhxjDbO3IhVQA==/109951170537166630.jpg?imageView&quality=89'
headers={# 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36''user-agent':ua.random
}
# 通過params攜帶參數
res=requests.get(url,headers=headers)
# print(res.content.decode())
with open('img/網易云.jpg','wb') as f:f.write(res.content)# 獲取qq音樂音頻
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://ws6.stream.qqmusic.qq.com/RS02064dfdIM38rSZY.mp3?guid=7976864250&vkey=AE4590431EAD34766DBAA9BA1A3715B3B45721EE23180669EA694EB7CA1F0DB4C8DE867A9883D4E897ED4E6F2ECF600CDFD34C78F2C07E09__v215192d1e&uin=554242051&fromtag=120052'
headers={# 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36''user-agent':ua.random
}
# 通過params攜帶參數
res=requests.get(url,headers=headers)
# print(res.content.decode())
with open('video/晴天.mp3','wb') as f:f.write(res.content)# 獲取qq音樂mv
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://mv6.music.tc.qq.com/44B177558A20632E722F75FB6A67025F0BFC15AB98CC0B58FD3FC79E00B2EEDC9FAC3DF26DD0A319EACA6B2A30D24E2CZZqqmusic_default__v21ea05e5a/qmmv_0b53feaagaaao4ae4d5t4vtvikiaamuqaa2a.f9944.ts'
headers={# 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36''user-agent':ua.random
}
# 通過params攜帶參數
res=requests.get(url,headers=headers)
# print(res.content.decode())
with open('video/qq音樂.mp4','wb') as f:f.write(res.content)# 獲取百度貼吧 翻頁
import requests
from fake_useragent import UserAgent
ua = UserAgent()
url='https://tieba.baidu.com/f?'
name=input('請輸入關鍵詞:')
page=int(input('請輸入要保存的頁數:'))
for i in range(page):params = {'kw': name,'ie': 'utf-8','pn': 0}headers = {'user-agent': ua.random}# 通過params攜帶參數res = requests.get(url, headers=headers,params=params)# print(res.content.decode())with open(f'html/{name}{i+1}.html', 'wb') as f:f.write(res.content)# 獲取百度貼吧轉換為面向對象方式
import requests
from fake_useragent import UserAgent
class TieBa:def __init__(self):self.url='https://tieba.baidu.com/f?'self.headers = {'user-agent': UserAgent().random}# 發起請求def send(self,params):# 通過params攜帶參數res = requests.get(self.url, headers=self.headers,params=params)return res.text# 保存def save(self,page,con):with open(f'html/{page}.html', 'w',encoding='utf-8') as f:f.write(con)# 程序運行def run(self):name = input('請輸入關鍵詞:')pages = int(input('請輸入要保存的頁數:'))for page in range(pages):params = {'kw': name,'ie': 'utf-8','pn': pages * 50}data=self.send(params)self.save(page,data)
te =TieBa()
te.run()# 金山翻譯 post
import requests
from fake_useragent import UserAgent
import jsonurl = 'https://ifanyi.iciba.com/index.php?c=trans'
headers = {'user-agent': UserAgent().random
}
name=input('請輸入翻譯內容:')
post_data = {'from': 'zh','to': 'en','q': name,
}
res = requests.post(url, headers=headers,data=post_data)
res.encoding = 'utf-8'
dict=json.loads(res.text)
print(dict['out'])# 下面就是中文的翻譯
#輸入 請輸入翻譯內容:中文
#輸出 the Chinese language# 代理
# 分為正向代理和反向代理
# 正向代理:給客戶端做代理,讓服務器不知道客戶端的真實身份(說句實在話就是保護自己的ip不會暴露,要封也是封代理ip)
# 反向代理:給服務器做代理,讓瀏覽器不知道服務器的真實地址
# 正向代理保護客戶端,反向代理保護服務端
# 實際上理論應該分為三類:透明代理(服務器知道我們使用了代理ip,也知道真實ip)、匿名代理(服務器能夠檢測到代理ip,但是無法知道真實ip)、高匿代理(服務器既不知代理ip,也不知道真實ip)
# proxies代理
import requests
from fake_useragent import UserAgent
url='https://www.baidu.com'
headers={'user-agent':UserAgent().random
}
# 構建代理字典
proxies={'http':'1.1.1.1:9527','https':'1.1.1.1:9527'
}
res=requests.get(url,headers=headers,proxies=proxies)
print(res.content.decode())

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897024.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897024.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897024.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025.3.2機器學習筆記:PINN文獻閱讀

2025.3.2周報 一、文獻閱讀題目信息摘要Abstract創新點網絡架構實驗結論不足以及展望 一、文獻閱讀 題目信息 題目: Physics-Informed Neural Networks of the Saint-Venant Equations for Downscaling a Large-Scale River Model期刊: Water Resource…

使用IDEA如何隱藏文件或文件夾

選擇file -> settings 選擇Editor -> File Types ->Ignored Files and Folders (忽略文件和目錄) 點擊號就可以指定想要隱藏的文件或文件夾

前端基礎之腳手架

腳手架結構 目錄結構 這里的package.json,存放著我們去執行npm run serve 或是npm run build的腳本文件 package-lock.json中存放著我們使用的外部包的版本類型,相當于maven src下的main.js是整個項目的入口文件 src下的components用于存放組件&#xff…

MacBook上API調??具推薦

在當今的軟件開發中,API調用工具已經成為了開發者不可或缺的助手。無論是前端、后端還是全棧開發,API的調試、測試和管理都是日常工作中的重要環節。想象一下,如果沒有這些工具,開發者可能需要手動編寫復雜的CURL命令,…

pgsql行列轉換

目錄 一、造測試數據 二、行轉列 1.函數定義 2.語法 3.示例 三、列轉行 1.函數定義 2.語法 3.示例 一、造測試數據 create table test ( id int, json1 varchar, json2 varchar );insert into test values(1,111,{111}); insert into test values(2,111,222,{111,22…

NVIDIA(英偉達) GPU 芯片架構發展史

GPU 性能的關鍵參數 CUDA 核心數量(個):決定了 GPU 并行處理能力,在 AI 等并行計算類業務下,CUDA 核心越多性能越好。 顯存容量(GB):決定了 GPU 加載數據量的大小,在 AI…

《Python實戰進階》No 10:基于Flask案例的Web 安全性:防止 SQL 注入、XSS 和 CSRF 攻擊

第10集:Web 安全性:防止 SQL 注入、XSS 和 CSRF 攻擊 在現代 Web 開發中,安全性是至關重要的。無論是用戶數據的保護,還是系統穩定性的維護,開發者都需要對常見的 Web 安全威脅有深刻的理解,并采取有效的防…

【大數據分析 | 深度學習】在Hadoop上實現分布式深度學習

【作者主頁】Francek Chen 【專欄介紹】 ? ? ?智能大數據分析 ? ? ? 智能大數據分析是指利用先進的技術和算法對大規模數據進行深入分析和挖掘,以提取有價值的信息和洞察。它結合了大數據技術、人工智能(AI)、機器學習(ML&a…

盛鉑科技SCP4000射頻微波功率計與SPP5000系列脈沖峰值 USB功率計 區別

在射頻(RF)和微波測試領域,快速、精準的功率測量是確保通信系統、雷達、衛星設備等高性能運行的核心需求。無論是連續波(CW)信號的穩定性測試,還是脈沖信號的瞬態功率分析,工程師都需要輕量化、…

自學微信小程序的第十三天

DAY13 1、使用map組件在頁面中創建地圖后,若想在JS文件中對地圖進行控制,需要通過地圖API來完成。先通過wx.createMapContext()方法創建MapContext(Map上下文)實例,然后通過該實例的相關方法來操作map組件。 const m…

深入解析 C# 中的泛型:概念、用法與最佳實踐

C# 中的 泛型(Generics) 是一種強大的編程特性,允許開發者在不預先指定具體數據類型的情況下編寫代碼。通過泛型,C# 能夠讓我們編寫更靈活、可重用、類型安全且性能優良的代碼。泛型廣泛應用于類、方法、接口、委托、集合等多個方…

H5DS編輯器是如何讓企業快速構建動態頁面

H5DS編輯器核心亮點: 1.拖拽式操作,小白友好:無需設計與代碼基礎!通過簡單拖拽元素、調整文字和動畫,即可生成交互式H5頁面。內置海量模板和素材庫,支持自定義設計風格,輕松適配企業品牌需求。…

Unity ECS與MonoBehaviour混合架構開發實踐指南

一、混合架構設計背景 1. 技術定位差異 ECS(Entity Component System):面向數據設計(DOD),適用于大規模實體計算(如10萬單位戰斗) MonoBehaviour:面向對象設計&#xf…

[項目]基于FreeRTOS的STM32四軸飛行器: 三.電源控制

基于FreeRTOS的STM32四軸飛行器: 三.電源控制 一.IP5305T芯片手冊二.電源控制任務 一.IP5305T芯片手冊 注意該芯片低功耗特性,為防止進入待機,每隔一段時間發送一個電平。 官方提供的芯片外圍電路設計圖: 電氣特性: 當負載電流持…

java環境部署

java環境部署 一、準備工作 jrejdkeclipse jdk下載:21和1.8-----官網:Oracle:Java 下載 |神諭 該處選擇要依據自身的系統類型選擇下載 idea的下載安裝:IntelliJ IDEA | Other Versions 二、安裝 三、環境配置 四、使用 五、i…

微服務通信:用gRPC + Protobuf 構建高效API

引言 在微服務架構中,服務之間的通信是系統設計的核心問題之一。傳統的RESTful API雖然簡單易用,但在性能、類型安全和代碼生成等方面存在一定的局限性。gRPC作為一種高性能、跨語言的RPC框架,結合Protobuf(Protocol Buffers&…

使用 Docker 和 Nginx 高效部署 Web 服務(適用于慈云數據云服務器)

前言 在現代 Web 服務部署中,Docker 和 Nginx 的結合是一種高效、靈活且可擴展的解決方案。 Docker 使應用程序及其依賴項封裝到一個獨立的容器中,確保一致性,并簡化部署過程。Nginx 作為高性能 Web 服務器和反向代理,能夠高效處…

C 語言數據結構(一):時/空間復制度

目錄 一、前言 1. 什么是數據結構 2. 什么是算法 二、時 / 空間復雜度 1. 算法效率 2. 時間復雜度 2.1 時間復雜度的概念 2.2 大 O 的漸進表示法 2.3 常見的計算時間復雜度的例子 2.3.1 實例 1 2.3.2 實例 2 2.3.3 實例 3 2.3.4 實例 4 2.3.5 實例 5 &#xff1a…

一文讀懂Redis分布式鎖

引言 在當今互聯網時代,分布式系統已成為大規模應用的主流架構。然而,這種架構中多個服務同時對共享資源的操作可能導致并發問題,如數據不一致和資源爭用。有效管理這些并發訪問,確保共享資源的安全性顯得尤為重要。 分布式鎖作…

23種設計模式一覽【設計模式】

文章目錄 前言一、創建型模式(Creational Patterns)二、結構型模式(Structural Patterns)三、行為型模式(Behavioral Patterns) 前言 設計模式是軟件工程中用來解決特定問題的一組解決方案。它們是經過驗證…