Rumah > Soal Jawab > teks badan
迷茫2017-04-18 10:00:30
Alhamdulillah saya baru jumpa penyelesaiannya
Ringkasan beberapa teknik untuk menggunakan perangkak python untuk merangkak tapak web - Python - Bole Online http://python.jobbole.com/81997/ Teks asal ada di sini
def request(url, cookie='xxx', retries=5):
ret = urlparse.urlparse(url) # Parse input URL
if ret.scheme == 'http':
conn = httplib.HTTPConnection(ret.netloc)
elif ret.scheme == 'https':
conn = httplib.HTTPSConnection(ret.netloc)
url = ret.path
if ret.query: url += '?' + ret.query
if ret.fragment: url += '#' + ret.fragment
if not url: url = '/'
try:
conn.request(method='GET', url=url, headers={'Cookie': cookie})
res = conn.getresponse()
except Exception, e:
print e.message
if retries > 0:
return request(url=url, retries= retries - 1)
else:
print 'GET Failed'
return ''
else:
pass
finally:
pass
if res.status != 200:
return None
return res.read()
Prinsipnya ialah menggunakan pembolehubah cuba semula untuk menyimpan bilangan percubaan semula, dan kemudian mengulangi sendiri dan menetapkan bilangan percubaan semula sebanyak -1 setiap kali pengecualian dikendalikan Jika dinilai bahawa bilangan percubaan semula adalah kurang daripada 0, kembali terus dan cetak log kegagalan
大家讲道理2017-04-18 10:00:30
Memanggil dirinya sendiri secara rekursif untuk melakukan kiraan cuba semula untuk menghadkan ialah kaedah yang paling langsung.
Tetapi terdapat masalah:
Jika alamat pihak lain hanya gagal buat sementara waktu, seperti memulakan semula perkhidmatan. Mencuba semula serta-merta masih gagal Masa untuk mencuba semula 5 kali adalah sangat singkat Apabila perkhidmatan pihak lain telah siap, permintaan itu diluluskan kerana ia telah dicuba semula 5 kali
Mekanisme yang saya gunakan ialah mencuba semula lima kali, menunggu selama 30s, 1 minit, 10 minit, 30 minit, dan 1 jam Jika masih gagal, ia dikira gagal.
Sudah tentu, penggunaan ini berdasarkan logik perniagaan tertentu. Keperluan perniagaan yang berbeza mempunyai keperluan yang berbeza untuk permintaan.