Jika anda ingin mempelajari perangkak dengan cepat, bahasa yang paling berbaloi untuk dipelajari ialah Python mempunyai banyak senario aplikasi, seperti: pembangunan web pantas, perangkak, operasi dan penyelenggaraan automatik, dsb. . Ia boleh dilakukan hanya Laman web, skrip pengeposan automatik, skrip penghantaran dan penerimaan e-mel, skrip pengecaman kod pengesahan yang mudah.
Perangkak juga mempunyai banyak proses penggunaan semula semasa proses pembangunan Hari ini saya akan meringkaskan 8 kemahiran penting, yang boleh menjimatkan masa dan usaha pada masa hadapan dan menyelesaikan tugas dengan cekap.
1. Merangkak asas halaman web
mendapatkan kaedah
import urllib2
url = "http://www.baidu.com"
response = urllib2.urlopen(url)
print response.read()
Salin selepas log masuk
kaedah pos
import urllib
import urllib2
url = "http://abcde.com"
form = {'name':'abc','password':'1234'}
form_data = urllib.urlencode(form)
request = urllib2.Request(url,form_data)
response = urllib2.urlopen(request)
print response.read()
Salin selepas log masuk
2 🎜 >
Dalam proses membangunkan crawler, kami sering menghadapi situasi di mana IP disekat Dalam kes ini, kami perlu menggunakan kelas ProxyHandler dalam pakej urllib2 sediakan proksi untuk mengakses halaman web, seperti yang ditunjukkan dalam coretan kod berikut:
import urllib2
proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8087'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
print response.read()
Salin selepas log masuk
3. Pemprosesan kuki
Kuki ialah data (biasanya disulitkan) yang disimpan pada terminal setempat pengguna. oleh beberapa tapak web untuk mengenal pasti identiti pengguna dan melaksanakan penjejakan sesi Python menyediakan Modul cookielib digunakan untuk memproses kuki Fungsi utama modul cookielib adalah untuk menyediakan objek yang boleh menyimpan kuki, supaya ia boleh digunakan bersama dengan modul urllib2 untuk mengakses sumber Internet. Cari akaun awam di WeChat: Panduan Arkitek, balas: Arkitek Dapatkan Maklumat.
Coretan kod:
import urllib2, cookielib
cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())
opener = urllib2.build_opener(cookie_support)
urllib2.install_opener(opener)
content = urllib2.urlopen('http://XXXX').read()
Salin selepas log masuk
Kuncinya ialah CookieJar(), yang digunakan untuk mengurus nilai kuki HTTP, menyimpan kuki yang dijana oleh permintaan HTTP dan menambah kuki pada HTTP keluar meminta objek. Keseluruhan kuki disimpan dalam ingatan, dan kuki akan hilang selepas kutipan sampah contoh CookieJar Semua proses tidak perlu dikendalikan secara berasingan.
Tambah kuki secara manual:
cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="
request.add_header("Cookie", cookie)
Salin selepas log masuk
4 Menyamar sebagai penyemak imbas
Sesetengah tapak web meluat dengan lawatan perangkak, jadi mereka menolak permintaan daripada perangkak. . Oleh itu, Ralat HTTP 403: Dilarang sering berlaku apabila menggunakan urllib2 untuk mengakses laman web secara terus.
Beri perhatian khusus kepada beberapa pengepala Pelayan akan menyemak pengepala ini:
Ejen Pengguna Sesetengah pelayan atau proksi akan menyemak nilai ini sama ada ia adalah Permintaan yang dimulakan oleh penyemak imbas
Jenis Kandungan Apabila menggunakan antara muka REST, Pelayan akan menyemak nilai ini untuk menentukan cara kandungan dalam Badan HTTP harus dihuraikan
Ini boleh dicapai dengan mengubah suai pengepala dalam pakej http Coretan kod adalah seperti berikut:
import urllib2
headers = {
'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
}
request = urllib2.Request(
url = 'http://my.oschina.net/jhao104/blog?catalog=3463517',
headers = headers
)
print urllib2.urlopen(request).read()
Salin selepas log masuk
5. Penghuraian halaman
Sudah tentu yang paling berkuasa untuk penghuraian halaman Ia adalah ungkapan biasa Ini berbeza untuk pengguna yang berbeza dari tapak web yang berbeza, jadi tidak perlu menjelaskan terlalu banyak
Yang kedua ialah pustaka penghuraian yang biasa digunakan satu ialah lxml dan BeautifulSoup
Penilaian saya terhadap kedua-dua perpustakaan ini ialah kedua-dua perpustakaan pemprosesan HTML/XML dilaksanakan semata-mata dalam python dan tidak cekap, tetapi fungsinya adalah praktikal. kod sumber nod HTML tertentu boleh diperolehi melalui hasil carian lxml pengekodan bahasa C, cekap, menyokong Xpath.
6. Pemprosesan kod pengesahan
Untuk beberapa kod pengesahan mudah, pengenalan mudah boleh dilakukan. Saya hanya melakukan beberapa pengecaman kod pengesahan mudah. Walau bagaimanapun, beberapa kod pengesahan anti-manusia, seperti 12306, boleh dikodkan secara manual melalui platform pengekodan Sudah tentu, ini memerlukan bayaran.
7. Pemampatan Gzip
Pernahkah anda menemui beberapa halaman web yang bercelaru tidak kira bagaimana ia ditranskodkan? Haha, ini bermakna anda tidak tahu bahawa banyak perkhidmatan web mempunyai keupayaan untuk menghantar data termampat, yang boleh mengurangkan jumlah besar data yang dihantar pada talian rangkaian sebanyak lebih daripada 60%. Ini adalah benar terutamanya untuk perkhidmatan web XML, kerana data XML boleh dimampatkan ke tahap yang sangat tinggi.
Tetapi secara amnya pelayan tidak akan menghantar data mampat untuk anda melainkan anda memberitahu pelayan bahawa anda boleh mengendalikan data mampat.
Jadi anda perlu mengubah suai kod seperti ini:
import urllib2, httplib
request = urllib2.Request('http://xxxx.com')
request.add_header('Accept-encoding', 'gzip')
opener = urllib2.build_opener()
f = opener.open(request)
Salin selepas log masuk
Ini adalah kuncinya: buat objek Permintaan dan tambahkan pengepala Accept-encoding untuk memberitahu pelayan yang anda boleh menerima data mampat gzip .
Kemudian nyahmampat data:
import StringIO
import gzip
compresseddata = f.read()
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compressedstream)
print gzipper.read()
Salin selepas log masuk
8 Rangka serentak berbilang benang
Jika satu utas terlalu perlahan, berbilang benang diperlukan, Di sini Memandangkan templat kumpulan benang yang mudah, program ini hanya mencetak 1-10, tetapi dapat dilihat bahawa ia adalah serentak.
Walaupun pelbagai benang Python tidak berguna, ia masih boleh meningkatkan kecekapan pada tahap tertentu untuk perangkak yang kerap menggunakan rangkaian.
Atas ialah kandungan terperinci Cadangan hati nurani! 8 kemahiran penting untuk ahli perangkak Python!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!