Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cadangan hati nurani! 8 kemahiran penting untuk ahli perangkak Python!

Cadangan hati nurani! 8 kemahiran penting untuk ahli perangkak Python!

PHPz
PHPzke hadapan
2023-04-13 11:55:051526semak imbas

Cadangan hati nurani! 8 kemahiran penting untuk ahli perangkak Python!

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()

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()

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()
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()
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)
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()
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)
    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()
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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam