我試圖根據上傳到文件的文件上傳一個網站的響應提取。網站有以下形式。Python:上傳文件後抓取數據
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<form method="POST" action="http://somewebsite.com/imgdigest" enctype="multipart/form-data">
quality:<input type="text" name="quality" value="2"><br>
category:<input type="text" name="category" value="1"><br>
debug:<input type="text" name="debug" value="1"><br>
image:<input type="file" name="image"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
我想要做的是上傳文件,提交表單並提取響應。
我開始看一個例子,我想我成功地設法上傳工作。因爲當我跑這個時,我沒有得到任何錯誤。
import urllib2_file
import urllib2
import request
import lxml.html as lh
data = {'name': 'image',
'file': open('/user/mydir/21T03NAPE7L._AA75_.jpg')
}
urllib2.urlopen('http://localhost/imgdigestertest.html', data)
不幸的是,我在這裏沒有做出請求來獲取響應。我不知道我該如何做出這樣的迴應。一旦我得到了答案,我應該能夠通過一些我感到舒適的模式匹配來提取數據。
根據所提供的答案嘗試下面的代碼:
import requests
url = 'http://somesite.com:61235/imgdigest'
files = {'file': ('21e1LOPiuyL._SL160_AA115_.jpg',
open('/usr/local/21e1LOPiuyL._SL160_AA115_.jpg', 'rb'))}
other_fields = {"quality": "2",
"category": "1",
"debug": "0"
}
headers={'content-type': 'text/html; charset=ISO-8859-1'}
response = requests.post(url, data=other_fields, files=files, headers=headers)
print response.text
現在我得到以下錯誤:它告訴我一些如何圖像文件不會被正確安裝。我們是否必須指定文件類型?
Image::Image(...): bufSize = 0. Can not load image data. Image size = 0. DigestServiceProvider.hpp::Handle(...) |
什麼是urllib2.urlopen('http://localhost/imgdigestertest.html',data).read()返回? – RickyA 2012-07-13 21:24:15
我得到了相同的html我發佈的結果,我試着下面的答案和結果是相同的 – 2012-07-13 22:43:24
什麼是data2 = urllib.urlencode(數據) req = urllib2.Request(url,data2)呢? – RickyA 2012-07-13 22:48:29