爬虫類ノート

3422 ワード

urlopen(url,data,timeout)の最初のパラメータurlはURLで、2番目のパラメータdataはURLにアクセスする時に送信するデータで、3番目のtimeoutはタイムアウト時間を設定します。
import urllib2
response = urllib2.urlopen("http://www.baidu.com")
print response.read()
推奨書き方(構造要求時には多くの内容を追加する必要があるので、requestを構築することにより、サーバ応答要求が応答される)
import urllib2
request = urllib2.Request("http://www.baidu.com")
response = urllib2.urlopen(request)
print response.read()
POST
import urlilb
import urllib2

values = {"username": "[email protected]", "password":"XXX"}
data = urllib.urlencode(values)
url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
request = urllib2.Request(url, data)
response = urllib2.urlopen(request)
print response.read()
GET
import urlilb
import urllib2

values = {"username": "[email protected]", "password":"XXX"}
data = urllib.urlencode(values)
url = "http://passport.csdn.net/account/login"
geturl = url + "?" + data
request = urllib2.Request(geturl, data)
response = urllib2.urlopen(request)
print response.read()
Headers
import urllib
import urllib2

url = "http://www.server.com/login"
user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
values = {"username":"[email protected]", "password":"XXX"}
headers = {"User-Agent": user_agent}
data = urllib.urlencode(values)
request = urllib2.Reqeust(url, data, headers)
response = urllib2.urlopen(request)
page = response.read()
盗難防止チェーンに対して、サーバーはheadersの中のrefererが自分ではないと認識します。そうでないと、サーバーが応答しない場合があります。headersの中にrefererを入れて、防犯チェーンに対処します。
headers = {
"User-Agent":Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36,
"Referer":"http://www.zhihu.com/articles"
}
Proxy
ウェブサイトに参加すると、ある期間のあるIPの訪問回数を検出します。訪問回数が多すぎると、あなたの訪問を禁止します。解決方法:いくつかのプロキシを設定して、一定の時間ごとに代理を変えます。
import urllib2
enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http": "http://some-proxy.com:8080"})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
    opener = urllib2.build_opener(proxy_handler)
else:
    opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)
Timeout
import urllib2
response = urllib2.urlopen("http://www.baidu.com", timeout = 10)

response = urllib2.urlopen("http://www.baidu.com", data, 10)
URLER or
import urllib2
request = urllib2.Request("http://www.xxxxx.com")
try:
    urllib2.urlopen(request)
except urllib2.URLError, e:
    print e.reason

# [Errno 11004] getaddrinfo failed
HTTPError
HTTPErrorはURLErrorのサブクラスです。
import urllib2
request = urllib2.Request("http://blog.csdn.net/cqcre")
try:
    urllib2.urlopen(request)
except urllib2.HTTPError, e:
    print e.code
    print e.reason
import urllib2
request = urllib2.Request("http://blog.csdn.net/cqcre")
try:
    urllib2.urlopen(request)
except urllib2.HTTPError, e:
    print e.code
except urllib2.URLError, e:
    print e.reason
else:
    print "OK"