『壹』 python爬蟲如何獲取網頁Network中某個文件的response
網頁信息在requests.get(xxxx).text里。好好看requests的文檔。get返回的是一個response對象,裡面有各種變數,你需要的是其中叫text的那一個。你直接print這個response對象的結果完全取決於開發者對__repr__或者__str__的重寫情況。
『貳』 Python什麼是 Response對象
response是返回值的意思岩廳
在python爬蟲中,發送數據請求和遲後,返回的數據,不是網頁的源代碼,喚棗李
『叄』 Python編程基礎之(五)Scrapy爬蟲框架
經過前面四章的學習,我們已經可以使用Requests庫、Beautiful Soup庫和Re庫,編寫基本的Python爬蟲程序了。那麼這一章就來學習一個專業的網路爬蟲框架--Scrapy。沒錯,是框架,而不是像前面介紹的函數功能庫。
Scrapy是一個快速、功能強大的網路爬蟲框架。
可能大家還不太了解什麼是框架,爬蟲框架其實是實現爬蟲功能的一個軟體結構和功能組件的集合。
簡而言之, Scrapy就是一個爬蟲程序的半成品,可以幫助用戶實現專業的網路爬蟲。
使用Scrapy框架,不需要你編寫大量的代碼,Scrapy已經把大部分工作都做好了,允許你調用幾句代碼便自動生成爬蟲程序,可以節省大量的時間。
當然,框架所生成的代碼基本是一致的,如果遇到一些特定的爬蟲任務時,就不如自己使用Requests庫搭建來的方便了。
PyCharm安裝
測試安裝:
出現框架版本說明安裝成功。
掌握Scrapy爬蟲框架的結構是使用好Scrapy的重中之重!
先上圖:
整個結構可以簡單地概括為: 「5+2」結構和3條數據流
5個主要模塊(及功能):
(1)控制所有模塊之間的數據流。
(2)可以根據條件觸發事件。
(1)根據請求下載網頁。
(1)對所有爬取請求進行調度管理。
(1)解析DOWNLOADER返回的響應--response。
(2)產生爬取項--scraped item。
(3)產生額外的爬取請求--request。
(1)以流水線方式處理SPIDER產生的爬取項。
(2)由一組操作順序組成,類似流水線,每個操作是一個ITEM PIPELINES類型。
(3)清理、檢查和查重爬取項中的HTML數據並將數據存儲到資料庫中。
2個中間鍵:
(1)對Engine、Scheler、Downloader之間進行用戶可配置的控制。
(2)修改、丟棄、新增請求或響應。
(1)對請求和爬取項進行再處理。
(2)修改、丟棄、新增請求或爬取項。
3條數據流:
(1):圖中數字 1-2
1:Engine從Spider處獲得爬取請求--request。
2:Engine將爬取請求轉發給Scheler,用於調度。
(2):圖中數字 3-4-5-6
3:Engine從Scheler處獲得下一個要爬取的請求。
4:Engine將爬取請求通過中間件發送給Downloader。
5:爬取網頁後,Downloader形成響應--response,通過中間件發送給Engine。
6:Engine將收到的響應通過中間件發送給Spider處理。
(3):圖中數字 7-8-9
7:Spider處理響應後產生爬取項--scraped item。
8:Engine將爬取項發送給Item Pipelines。
9:Engine將爬取請求發送給Scheler。
任務處理流程:從Spider的初始爬取請求開始爬取,Engine控制各模塊數據流,不間斷從Scheler處獲得爬取請求,直至請求為空,最後到Item Pipelines存儲數據結束。
作為用戶,只需配置好Scrapy框架的Spider和Item Pipelines,也就是數據流的入口與出口,便可完成一個爬蟲程序的搭建。Scrapy提供了簡單的爬蟲命令語句,幫助用戶一鍵配置剩餘文件,那我們便來看看有哪些好用的命令吧。
Scrapy採用命令行創建和運行爬蟲
PyCharm打開Terminal,啟動Scrapy:
Scrapy基本命令行格式:
具體常用命令如下:
下面用一個例子來學習一下命令的使用:
1.建立一個Scrapy爬蟲工程,在已啟動的Scrapy中繼續輸入:
執行該命令,系統會在PyCharm的工程文件中自動創建一個工程,命名為pythonDemo。
2.產生一個Scrapy爬蟲,以教育部網站為例http://www.moe.gov.cn:
命令生成了一個名為demo的spider,並在Spiders目錄下生成文件demo.py。
命令僅用於生成demo.py文件,該文件也可以手動生成。
觀察一下demo.py文件:
3.配置產生的spider爬蟲,也就是demo.py文件:
4.運行爬蟲,爬取網頁:
如果爬取成功,會發現在pythonDemo下多了一個t20210816_551472.html的文件,我們所爬取的網頁內容都已經寫入該文件了。
以上就是Scrapy框架的簡單使用了。
Request對象表示一個HTTP請求,由Spider生成,由Downloader執行。
Response對象表示一個HTTP響應,由Downloader生成,有Spider處理。
Item對象表示一個從HTML頁面中提取的信息內容,由Spider生成,由Item Pipelines處理。Item類似於字典類型,可以按照字典類型來操作。
『肆』 python httplib response 對象怎麼轉成json
json包的mps方法可以將python中的對象轉換為json格脊瞎式 import jsonx = ['a',{'賣喚c':'d'},1]json.mps(x)其中indent參數可以設櫻配空置縮進值 json.mps(x, indent=4)
『伍』 python用 request 抓取網頁,得到 response 對象中的哪個成員代表網頁的原始位元組流
是response.content
『陸』 Python爬蟲筆記(二)requests模塊get,post,代理
import requests
base_url = 'https://www..com'
response = requests.get(base_url)
url=請求url,
headers =請求頭字典,
params = 請求參數字典。
timeout = 超時時長,
)---->response對象
伺服器響應包含:狀態行(協議,狀態碼)、響應頭,空行,響應正文
字元串格式:response.text
bytes類型:response.content
response.headers['cookie']
response.text獲取到的字元串類型的響應正文,
其實是通過下面的步驟獲取的:
response.text = response.content.decode(response.encoding)
產生的原因:編碼和解碼的編碼格式不一致造成的。
str.encode('編碼')---將字元串按指定編碼解碼成bytes類型
bytes.decode('編碼')---將bytes類型按指定編碼編碼成字元串。
a、response.content.decode('頁面正確的編碼格式')
<meta http-equiv="content-type" content="text/html;charset=utf-8">
b、找到正確的編碼,設置到response.encoding中
response.encoding = 正確的編碼
response.text--->正確的頁面內容。
a、沒有請求參數的情況下,只需要確定url和headers字典。
b、get請求是有請求參數。
在chrome瀏覽器中,下面找query_string_params,
將裡面的參數封裝到params字典中。
c、分頁主要是查看每頁中,請求參數頁碼欄位的變化,
找到變化規律,用for循環就可以做到分頁。
requests.post(
url=請求url,
headers = 請求頭字典,
data=請求數據字典
timeout=超時時長
)---response對象
post請求一般返回數據都是json數據。
(1)response.json()--->json字元串所對應的python的list或者dict
(2)用 json 模塊。
json.loads(json_str)---->json_data(python的list或者dict)
json.mps(json_data)--->json_str
post請求能否成功,關鍵看**請求參數**。
如何查找是哪個請求參數在影響數據獲取?
--->通過對比,找到變化的參數。
變化參數如何找到參數的生成方式,就是解決這個ajax請求數據獲取的途徑。
**尋找的辦法**有以下幾種:
(1)寫死在頁面。
(2)寫在js中。
(3)請求參數是在之前的一條ajax請求的數據裡面提前獲取好的。
代理形象的說,他是網路信息中轉站。
實際上就是在本機和伺服器之間架了一座橋。
a、突破自身ip訪問現實,可以訪問一些平時訪問不到網站。
b、訪問一些單位或者團體的資源。
c、提高訪問速度。代理的伺服器主要作用就是中轉,
所以一般代理服務裡面都是用內存來進行數據存儲的。
d、隱藏ip。
FTP代理伺服器---21,2121
HTTP代理伺服器---80,8080
SSL/TLS代理:主要用訪問加密網站。埠:443
telnet代理 :主要用telnet遠程式控制制,埠一般為23
高度匿名代理:數據包會原封不動轉化,在服務段看來,就好像一個普通用戶在訪問,做到完全隱藏ip。
普通匿名代理:數據包會做一些改動,伺服器有可能找到原ip。
透明代理:不但改動數據,還會告訴服務,是誰訪問的。
間諜代理:指組織或者個人用於記錄用戶傳輸數據,然後進行研究,監控等目的的代理。
proxies = {
'代理伺服器的類型':'代理ip'
}
response = requests.get(proxies = proxies)
代理伺服器的類型:http,https,ftp
代理ip:http://ip:port
『柒』 Python中-x.response是什麼意思
沒有程序上下談銷文,單看這個沒有辦法確定它的意思的。
從詞面意思看,x應該是一個網路請求返回的對象。
response是這個對象的含橋游一個屬消咐性
『捌』 python的reponses.text是什麼類型
requests.get返回的 r 是Response對象,r.content 就輪悔是返回內容的位元組流,r.text就是對content解碼後的結果。
所以Python3得到的是str類型的,禪桐謹Python2得到的是unicode類型。
一般Python會根據相應中指定的類型來賀基解碼,你也可以通過指定 r.encoding 來指定編碼方式。
『玖』 python2.7 中 response.read()返回的是一個httpresponse對象還是一個html對象
返回的是html字元串類型。
『拾』 Python後端 - HttpRespones對象
coding=utf-8
from django.http import HttpResponse
屬性:
方法:
在應用的urls.py中增加一個url對象
請求地址欄如圖:
請求結果的地址欄如圖:
推薦使用 反向解析:
JsonResponse的默認Content-Type為application/json
簡寫函數
得到對象或返回404
get_object_or_404(klass, args, *kwargs)
通過模型管理器或悔喊查世前磨詢集調用get()方法,如果沒找到對象,不引發搜斗模型的DoesNotExist異常,而是引發Http404異常
klass:獲取對象的模型類、Manager對象或QuerySet對象
**kwargs:查詢的參數,格式應該可以被get()和filter()接受
如果找到多個對象將引發MultipleObjectsReturned異常
將settings.py中的DEBUG改為False
將請求地址輸入2和100查看效果
得到列表或返回404
get_list_or_404(klass, args, *kwargs)
klass:獲取列表的一個Model、Manager或QuerySet實例
**kwargs:查尋的參數,格式應該可以被get()和filter()接受