當前位置:首頁 » 編程語言 » pythonurllib2圖片

pythonurllib2圖片

發布時間: 2022-08-19 15:48:43

python2 能使用requests嗎

由於公司要用到模擬用戶登錄,於是用學校圖書館讀者登錄來進行練習。

工具是python2 + requests第三方庫+火狐瀏覽器的firebug進行http抓包

目標 用python成功登錄學校圖書館

接下來幾篇會利用urllib和urllib2標准庫進行登錄

以下為具體步驟:

1 打開學校圖書館網址,以下為登錄界面


綜合以上分析,利用requests庫進行模擬用戶登錄。這里的post參數採用了之前圖片的源碼形式,使得參數順序匹配

import requests

url = "http://210.32.205.60/login.aspx"
# 學校圖書館登錄url
header = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Connection":"keep-alive",
"Content-Type":"application/x-www-form-urlencoded",
"Host":"210.32.205.60",
"Referer": "http://210.32.205.60/login.aspx",
"Upgrade-Insecure-Requests":"1",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:54.0) Gecko/20100101 Firefox/54.0"
}

body = b'__VIEWSTATE=%uMtIIHXEj%&__VIEWSTATEGENERATOR=C2EE9ABB&__EVENTVALIDATION=%2FwEdAAbAeS%2BByzNg%%2FzVFQdp1z%2BnYWZ%%2BIuKmLNV%%3D%3D&DropDownList1=0&TextBox1=讀者號&TextBox2=密碼&ImageButton1.x=44&ImageButton1.y=12'r = requests.post(url, data=body, headers=header)

print r.text

以上為一次提交,沒有進行重定向截取。

如果想用reque庫截取重定向,在這個圖書館登錄中則需要進行兩次操作,這里相當於只做了post請求,頭部,post參數都不變,只不過在requests.post()內設置了參數

r = requests.post(url, data=body, headers=header, allow_redirects=False)
# 設置 allow_redirects=False 使得禁止重定向
aspid = r.headers["Set-Cookie"] # 返回頁面的頭部的cookie
print r.status_code # 輸出302

如果再想登陸圖書館頁面,那麼需要將cookie重新加入新的url上,進行get請求的提交,此時url為/Default.aspx.

url ="http://210.32.205.60/Default.aspx"
header = {
"Accept": "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*",
"Referer": "http://210.32.205.60/login.aspx",
"Accept-Language": "zh-CN",
"User-Agent": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)",
"Accept-Encoding": "gzip, deflate",
"Host": "210.32.205.60",
"Connection": "Keep-Alive",
"Pragma": "no-cache",
"Cookie": aspid
}
r = requests.get(url=url,headers=header)
print r.status_code
print r.text

接下來的幾篇是利用python2的urllib2和urllib進行相同的模擬用戶登錄。

ps 由於urllib2處理重定向的時候不會將cookie帶上,會導致頁面不能正確爬取,所以要處理重定向。解決urllib重定向文章在此,分別介紹了urllib2自動處理重定向(帶上cookie),和urllib2阻止重定向,返回cookie。

利用urllib2進行自動處理重定向,模擬瀏覽器提交post一次,就可以登錄圖書館的文章在這。

利用urllib2處理重定向,使得重定向截斷,獲取cookie,根據cookie用代碼實現重定向,登錄圖書館的文章在此。

② Python爬蟲是什麼

為自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁。

網路爬蟲為一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。

將根據一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重復上述過程,直到達到系統的某一條件時停止。另外,所有被爬蟲抓取的網頁將會被系統存貯,進行一定的分析、過濾,並建立索引,以便之後的查詢和檢索。

(2)pythonurllib2圖片擴展閱讀:

網路爬蟲的相關要求規定:

1、由Python標准庫提供了系統管理、網路通信、文本處理、資料庫介面、圖形系統、XML處理等額外的功能。

2、按照網頁內容目錄層次深淺來爬行頁面,處於較淺目錄層次的頁面首先被爬行。 當同一層次中的頁面爬行完畢後,爬蟲再深入下一層繼續爬行。

3、文本處理,包含文本格式化、正則表達式匹配、文本差異計算與合並、Unicode支持,二進制數據處理等功能。

③ python中用urllib.retrieve下載網頁圖片時,由於許可權問題不能下載

你是不是下載了要登錄後才能看到的圖片?可以試著加一下cookie

importcookielib
cj=cookielib.MozillaCookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)

然後再添加user agent一起用試試看

④ 剛學python 求指教 ——抓取網站圖片,圖片保存到本地後無法打開,什麼原因

這個網站給回來的是gzip過的數據,但是http頭裡面又沒有聲明gzip,所以就錯了。


在保存文件的時候改成這樣:

withopen(url2[-8:],"wb")ascode:
decompresser=zlib.decompressobj(16+zlib.MAX_WBITS)
data=decompresser.decompress(f.read())
code.write(data)

當然,別忘了import zlib

⑤ Python3.xx中寫爬蟲,下載圖片除了urlretrieve方法,還有什麼庫的什麼方法呢

Part 1. urllib2
urllib2是Python標准庫提供的與網路相關的庫,是寫爬蟲最常用的一個庫之一。
想要使用Python打開一個網址,最簡單的操作即是:
your_url = "http://publicdomainarchive.com/"html = urllib2.urlopen(your_url).read()12

這樣所獲得的就是對應網址(url)的html內容了。
但有的時候這么做還不夠,因為目前很多的網站都有反爬蟲機制,對於這么初級的代碼,是很容易分辨出來的。例如本文所要下載圖片的網站http://publicdomainarchive.com/,上述代碼會返回HTTPError: HTTP Error 403: Forbidden錯誤。
那麼,在這種情況下,下載網路圖片的爬蟲(雖然只有幾行代碼,但一個也可以叫做爬蟲了吧,笑),就需要進一步的偽裝。
要讓爬蟲偽裝成瀏覽器訪問指定的網站的話,就需要加入消息頭信息。所謂的消息頭信息就是在瀏覽器向網路伺服器發送請求時一並發送的請求頭(Request Headers)信息和伺服器返回的響應頭(Response Headers)信息。
例如,使用FireFox打開http://publicdomainarchive.com/時所發送的Request Headers的部分內容如下:
Host:"publicdomainarchive.com/"User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"...1234

還有一些其他屬性,但其中偽裝成瀏覽器最重要的部分已經列出來了,即User-Agent信息。
要使用Headers信息,就不能再僅僅向urlopen方法中傳入一個地址了,而是需要將HTTP Request的Headers封裝後傳入:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}req = urllib2.Request(url = url, headers = headers)content = urllib2.urlopen(req).read()123

這樣,就獲得了網站的html內容。
接下來,就需要從html去獲取圖片的鏈接。
Part 2. HTMLParser
HTMLParser是Python提供的HTML解析庫之一。
但Python提供的這個類中很多方法都沒有實現,因而基本上這個庫只負責進行解析,但解析完了什麼都不做。所以如果需要對HTML中的某些元素進行加工的話,就需要用戶自己去實現其中的一些方法。本文僅實現其中的handle_starttag方法:
class MyHTMLParser(HTMLParser): #繼承HTMLParser類
def __init__(self): #初始化
HTMLParser.__init__(self) def handle_starttag(self, tag, attrs):
#參數tag即由HTMLParser解析出的開始標簽,attrs為該標簽的屬性
if tag == "img": #下載圖片所需要的img標簽
if len(attrs) == 0: pass
else: for (variable, value) in attrs: #在attrs中找到src屬性,並確定其是我們所要下載的圖片,最後將圖片下載下來(這個方法當然也有其他的寫法)
if variable == "src" and value[0:4] == 'http' and value.find('x') >= 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)123456789101112131415

Part 3. 下載圖片
從handle_starttag方法中,我們已經獲得了圖片的url,那麼,最後一步,我們要下載圖片了。
當然,要獲得網路上的圖片,自然也需要向伺服器發送請求,一樣需要用到urllib2這個庫,也需要用到上面所用到的請求頭。
以下是down_image()方法的主要代碼:
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()1234

因為這次打開的網址是個圖片,所以urllib2.urlopen(req).read()所獲取的就是圖片的數據,將這些數據需要以二進制的方式寫入本地的圖片文件,即將圖片下載下來了。
因為圖片的url的最後一部分是圖片的名字,所以可以直接用做本地的文件名,不用擔心命名沖突,也不用擔心後綴不符,很是方便。
Part 4. getFreeImages.py
這個下載圖片的腳本的完整代碼如下:
import urllib2,osfrom HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self) #self.links = {}

def handle_starttag(self, tag, attrs):
#print "Encountered the beginning of a %s tag" % tag
if tag == "img": if len(attrs) == 0: pass
else: for (variable, value) in attrs: if variable == "src" and value[0:4] == 'http' and value.find('x') >= 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)def down_image(url,file_name):
global headers
req = urllib2.Request(url = url, headers = headers)
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()if __name__ == "__main__":
img_dir = "D:\\Downloads\\domain images"

if not os.path.isdir(img_dir):
os.mkdir(img_dir)

os.chdir(img_dir) print os.getcwd()
url = ""
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}
all_links = []
hp = MyHTMLParser() for i in range(1,30):
url = 'http://publicdomainarchive.com/public-domain-images/page/' + str(i) + '/'
req = urllib2.Request(url = url, headers = headers)
content = urllib2.urlopen(req).read()
hp.feed(content)

hp.close()041424344454647484950

⑥ python上傳圖片頭像。一個post 提交不知道怎麼寫這樣的

首先你需要在你的表單上添加enctype="multipart/form-data"。

<formaction="/message/"enctype="multipart/form-data"method="post">
<inputtype="file"name="picfile">
<buttonvalue="提交"type="submit">提交</button>
</form>


其次看你後端的web框架,如果是django,你可以參考。

fromPILimportImage
try:
reqfile=
request.FILES['picfile']#picfile要和html裡面一致
img=Image.open(reqfile)
img.thumbnail((500,500),Image.ANTIALIAS)#對圖片進行等比縮放
img.save("/Users/bcc/Desktop/python/bbs/Image/a.png","png")#保存圖片
exceptException,e:
returnHttpResponse("Error%s"%e)#異常,查看報錯信息

如果解決了您的問題請採納!
如果未解決請繼續追問

⑦ Python如何獲取圖片長寬等信息

使用PIL模塊,windows安裝包下載:

http://www.pythonware.com/procts/pil/

使用方法

#coding:utf8
#獲取指定圖片的長和寬
fromPILimportImage
img=Image.open("img.jpg")
printimg.size

運行結果:
(52,54)

⑧ python為什麼叫爬蟲

因為python的腳本特性,易於配置,對字元的處理也非常靈活,就像蟲子一樣靈活,故名爬蟲。

Python是完全面向對象的語言。函數、模塊、數字、字元串都是對象。並且完全支持繼承、重載、派生、多繼承,有益於增強源代碼的復用性。

Python支持重載運算符和動態類型。相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標准庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。

擴展資

Python的設計目標之一是讓代碼具備高度的可閱讀性。它設計時盡量使用其它語言經常使用的標點符號和英文單字,讓代碼看起來整潔美觀。它不像其他的靜態語言如C、Pascal那樣需要重復書寫聲明語句,也不像它們的語法那樣經常有特殊情況和意外。

Python開發者有意讓違反了縮進規則的程序不能通過編譯,以此來強製程序員養成良好的編程習慣。

並且Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括弧或者某種關鍵字。增加縮進表示語句塊的開始,而減少縮進則表示語句塊的退出。縮進成為了語法的一部分。

例如if語句:python3。

熱點內容
反編譯連接資料庫 發布:2025-01-19 22:07:55 瀏覽:786
貴州省發票軟體伺服器地址 發布:2025-01-19 22:00:12 瀏覽:694
linux的單用戶模式 發布:2025-01-19 21:55:29 瀏覽:425
android型號 發布:2025-01-19 21:48:14 瀏覽:337
供應外置存儲陣列櫃 發布:2025-01-19 21:32:41 瀏覽:999
柴火壓縮機 發布:2025-01-19 21:20:53 瀏覽:624
途觀5053匹配密碼在哪裡 發布:2025-01-19 21:19:58 瀏覽:352
晶銳買哪個配置 發布:2025-01-19 21:19:52 瀏覽:329
vpn如何訪問伺服器 發布:2025-01-19 21:09:31 瀏覽:496
如何測試電視的配置 發布:2025-01-19 21:00:48 瀏覽:610