2012-04-15 34 views
10

Tôi muốn tìm thông tin về một trang web bằng curl, nhưng trong Python, cho đến nay tôi có điều này:Làm thế nào để Chụp Sản lượng Curl từ Python script

os.system("curl --head www.google.com") 

Nếu tôi chạy đó, nó in ra:

HTTP/1.1 200 OK 
Date: Sun, 15 Apr 2012 00:50:13 GMT 
Expires: -1 
Cache-Control: private, max-age=0 
Content-Type: text/html; charset=ISO-8859-1 
Set-Cookie: PREF=ID=3e39ad65c9fa03f3:FF=0:TM=1334451013:LM=1334451013:S=IyFnmKZh0Ck4xfJ4; expires=Tue, 15-Apr-2014 00:50:13 GMT; path=/; domain=.google.com 
Set-Cookie: NID=58=Giz8e5-6p4cDNmx9j9QLwCbqhRksc907LDDO6WYeeV-hRbugTLTLvyjswf6Vk1xd6FPAGi8VOPaJVXm14TBm-0Seu1_331zS6gPHfFp4u4rRkXtSR9Un0hg-smEqByZO; expires=Mon, 15-Oct-2012 00:50:13 GMT; path=/; domain=.google.com; HttpOnly 
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info." 
Server: gws 
X-XSS-Protection: 1; mode=block 
X-Frame-Options: SAMEORIGIN 
Transfer-Encoding: chunked 

Điều tôi muốn làm, có thể khớp 200 trong đó bằng regex (tôi không cần trợ giúp), nhưng, tôi không thể tìm cách chuyển đổi tất cả văn bản ở trên thành một chuỗi. Làm thế nào để làm điều đó? Tôi đã thử: info = os.system("curl --head www.google.com") nhưng info chỉ là 0.

+0

"Mô-đun xử lý con cung cấp các cơ sở mạnh mẽ hơn để sinh ra các quy trình mới và truy xuất kết quả của chúng, sử dụng mô đun đó là thích hợp hơn để sử dụng chức năng này. ing Các hàm cũ hơn với phần Mô đun con xử lý trong tài liệu quy trình con cho một số công thức nấu ăn hữu ích. " -http: //docs.python.org/library/os.html#os.system –

Trả lời

2

Hãy thử điều này:

import httplib 
conn = httplib.HTTPConnection("www.python.org") 
conn.request("GET", "/index.html") 
r1 = conn.getresponse() 
print r1.status, r1.reason 
+8

Điều này không thực sự trả lời câu hỏi về cách nắm bắt đầu ra từ curl. Thông thường, bạn cần phải cuộn tròn để gửi các cookie cụ thể và các thông số khác. – 576i

17

Hãy thử điều này, sử dụng subprocess.Popen():

import subprocess 
proc = subprocess.Popen(["curl", "--head", "www.google.com"], stdout=subprocess.PIPE) 
(out, err) = proc.communicate() 
print out 

Như đã nêu trong documentation:

Các module subprocess cho phép bạn đẻ trứng quy trình mới, kết nối với đường ống đầu vào/đầu ra/lỗi của họ, và lấy mã trả lại của họ. Module này có ý định thay thế một số khác, mô-đun lớn tuổi và chức năng, chẳng hạn như:

os.system 
os.spawn* 
os.popen* 
popen2.* 
commands.* 
+0

Tại sao? Giải thích plz – Billjk

+0

@ user1333973: Vì 'subprocess' hoạt động và' os.system() 'không. –

+0

@ user1333973 đã thêm liên kết vào tài liệu –

0

Bạn có thể sử dụng một thư viện HTTP hoặc http thư viện khách hàng bằng Python thay vì gọi một lệnh curl. Trong thực tế, có một thư viện curl mà bạn có thể cài đặt (miễn là bạn có một trình biên dịch trên hệ điều hành của bạn).

Các lựa chọn khác là httplib2 (được khuyến nghị), là một trình khách giao thức http khá hoàn chỉnh hỗ trợ bộ nhớ đệm, hoặc chỉ đơn giản là httplib hoặc một thư viện có tên là Yêu cầu.

Nếu bạn thực sự, thực sự muốn chỉ cần chạy lệnh curl và chụp sản lượng của nó, sau đó bạn có thể làm điều này với Popen trong module subprocess BUILTIN tài liệu ở đây: http://docs.python.org/library/subprocess.html

0

Vâng, có một cách dễ dàng hơn để đọc, nhưng cách dễ dàng hơn để làm điều đó. Dưới đây là:

import os 
outfile='' #put your file path there 
os.system("curl --head www.google.com>>{x}".format(x=str(outfile)) #Outputs command to log file (and creates it if it doesnt exist). 
readOut=open("{z}".format(z=str(outfile),"r") #Opens file in reading mode. 
for line in readOut: 
    print line #Prints lines in file 
readOut.close() #Closes file 
os.system("del {c}".format(c=str(outfile)) #This is optional, as it just deletes the log file after use. 

Điều này sẽ hoạt động đúng với nhu cầu của bạn. :)

8

Đối với một số lý do ... Tôi cần sử dụng curl (không pycurl, httplib2 ...), có lẽ điều này có thể giúp ai đó:

import os 
result = os.popen("curl http://google.es").read() 
print result 
+2

Cảm ơn điều này trực quan hơn các câu trả lời khác, tiện dụng cho các tập lệnh được tạo ra một cách bẩn thỉu/nhanh chóng :) –

2
import os 
cmd = 'curl https://randomuser.me/api/' 
os.system(cmd) 

quả

{"results":[{"gender":"male","name":{"title":"mr","first":"çetin","last":"nebioğlu"},"location":{"street":"5919 abanoz sk","city":"adana","state":"kayseri","postcode":53537},"email":"çetin.nebioğ[email protected]","login":{"username":"heavyleopard188","password":"forgot","salt":"91TJOXWX","md5":"2b1124732ed2716af7d87ff3b140d178","sha1":"cb13fddef0e2ce14fa08a1731b66f5a603e32abe","sha256":"cbc252db886cc20e13f1fe000af1762be9f05e4f6372c289f993b89f1013a68c"},"dob":"1977-05-10 18:26:56","registered":"2009-09-08 15:57:32","phone":"(518)-816-4122","cell":"(605)-165-1900","id":{"name":"","value":null},"picture":{"large":"https://randomuser.me/api/portraits/men/38.jpg","medium":"https://randomuser.me/api/portraits/med/men/38.jpg","thumbnail":"https://randomuser.me/api/portraits/thumb/men/38.jpg"},"nat":"TR"}],"info":{"seed":"0b38b702ef718e83","results":1,"page":1,"version":"1.1"}} 
Các vấn đề liên quan