15

curlを使用してWebページに関する情報を検索したいのですが、Pythonでは、これまでのところ次のようになっています。

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

それを実行すると、次のように出力されます。

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

私がやりたいのは、正規表現を使用してその中の200を一致させることです(私はそれについての助けは必要ありません)が、上記のすべてのテキストを文字列に変換する方法を見つけることができません。それ、どうやったら出来るの?私は試しました:info = os.system("curl --head www.google.com")しかし、infoただでした0

4

6 に答える 6

31

何らかの理由で...私はcurlを使用する必要があります(pycurlなし、httplib2 ...)、多分これは誰かに役立つかもしれません:

import os
result = os.popen("curl http://google.es").read()
print result
于 2015-08-20T13:16:33.200 に答える
23

を使用して、これを試してくださいsubprocess.Popen()

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

ドキュメントに記載されているように:

サブプロセスモジュールを使用すると、新しいプロセスを生成し、それらの入力/出力/エラーパイプに接続して、それらのリターンコードを取得できます。このモジュールは、次のような他のいくつかの古いモジュールおよび機能を置き換えることを目的としています。

os.system
os.spawn*
os.popen*
popen2.*
commands.*
于 2012-04-15T01:02:50.143 に答える
4
import os
cmd = 'curl https://randomuser.me/api/'
os.system(cmd)

結果

{"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ğlu@example.com","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"}}
于 2016-08-31T18:44:47.333 に答える
0

まあ、読みやすいですが、それを行うための厄介な方法があります。ここにあります:

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.

これは、ニーズに合わせて適切に機能するはずです。:)

于 2012-04-15T02:02:41.750 に答える
0

curlコマンドを呼び出す代わりに、PythonでHTTPライブラリまたはhttpクライアントライブラリを使用できます。実際、インストールできるcurlライブラリがあります(OSにコンパイラがある場合)。

他の選択肢は、キャッシュもサポートするかなり完全なhttpプロトコルクライアントであるhttplib2(推奨)、または単なるhttplibまたはRequestという名前のライブラリです。

本当に、curlコマンドを実行してその出力をキャプチャしたい場合は、http://docs.python.org/library/subprocess.htmlに記載されている組み込みのサブプロセスモジュールのPopenを使用してこれを行うことができます

于 2012-04-15T01:08:39.410 に答える
-1

これを試して:

import httplib
conn = httplib.HTTPConnection("www.python.org")
conn.request("GET", "/index.html")
r1 = conn.getresponse()
print r1.status, r1.reason
于 2012-04-15T01:31:56.787 に答える