Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan ungkapan biasa Python untuk merangkak dan anti-merangkak

Cara menggunakan ungkapan biasa Python untuk merangkak dan anti-merangkak

WBOY
WBOYasal
2023-06-23 09:19:42611semak imbas

Dalam proses merangkak, kami sering menghadapi mekanisme anti-merangkak, yang memerlukan kami menggunakan beberapa alat dan teknik untuk memintas halangan ini. Antaranya, ungkapan biasa ialah alat yang sangat penting, yang boleh membantu kami melakukan pemadanan dan pemprosesan data dalam perangkak. Di bawah, kami akan memperkenalkan cara menggunakan ungkapan biasa Python untuk merangkak dan anti-merangkak.

  1. Memahami ungkapan biasa

Ungkapan biasa ialah alat yang digunakan untuk menerangkan corak teks ia boleh menerangkan rentetan sasaran melalui beberapa simbol dan perkataan tertentu. Dalam Python, kita boleh menggunakan modul semula untuk memanipulasi ungkapan biasa.

Sebagai contoh, jika kita ingin memadankan nombor telefon (dalam format xxx-xxxx-xxxx), maka kita boleh menggunakan ungkapan biasa berikut:

import re

regex = re.compile(r'd{3}-d{4}-d{4}')

Dalam ungkapan biasa ini, d bermaksud memadankan nombor, {3} bermaksud memadankan 3 nombor, {4} bermaksud memadankan 4 nombor dan - bermaksud memadankan tanda sempang. Melalui ungkapan biasa ini, kita boleh memadankan nombor telefon yang sepadan dengan corak.

  1. Merangkak kandungan web

Sebelum anti-merangkak, kita perlu terlebih dahulu merangkak kandungan tapak web sasaran. Dalam Python, kita boleh menggunakan perpustakaan permintaan untuk mendapatkan kandungan halaman web. Sebagai contoh, jika kita ingin mendapatkan halaman ranking filem Maoyan, kita boleh menggunakan kod berikut:

import requests

url = 'https://maoyan.com/board'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

response = requests.get(url, headers=headers)

html = response.text

Antaranya, parameter headers ialah pengepala permintaan palsu, yang boleh membantu kami memintas beberapa anti -mekanisme crawler. response.text mewakili kandungan halaman web yang diperoleh Sekarang kami telah memperoleh kod sumber halaman web sasaran.

  1. Gunakan ungkapan biasa untuk pemprosesan data

Selepas mendapat kod sumber halaman web, kami perlu menggunakan ungkapan biasa untuk mengekstrak maklumat yang kami perlukan. Mengambil kedudukan filem Maoyan sebagai contoh, kami ingin mendapatkan nama dan masa tayangan semua filem dalam ranking. Dengan melihat kod sumber, kita dapati maklumat ini ada dalam teg HTML berikut:

<dd>
    <div class="movie-item-info">
        <p class="name"><a href="/films/1211269" title="误杀" data-act="boarditem-click" data-val="{movieId:1211269}">误杀</a></p>
        <p class="star">
                主演:肖央,谭卓,钟南山
        </p>
<p class="releasetime">上映时间:2020-12-04</p>    </div>
    <div class="movie-item-number score-num">
        <p class="score"><i class="integer">9.</i><i class="fraction">7</i></p>        
    </div>
</dd>

Kita boleh menggunakan ungkapan biasa berikut untuk memadankan nama filem dan masa tayangan:

pattern = re.compile('<p class="name"><a href="/films/d+" title="(.*?)" data-act="boarditem-click".*?<p class="releasetime">(.*?)</p>', re.S)

Ini Dalam ungkapan biasa, .*? mewakili padanan tidak tamak, iaitu, hanya memadankan kandungan teks yang diperlukan. re.S bermakna . boleh memadankan mana-mana watak, termasuk pemisah baris. Kini kami telah membina ungkapan biasa yang sepadan dengan tajuk filem dan masa tayangan.

Seterusnya, kita boleh menggunakan kaedah findall ungkapan biasa untuk mengekstrak hasil yang sepadan:

movies = re.findall(pattern, html)

Operasi ini akan mengembalikan senarai, setiap elemen yang merupakan elemen Kumpulan, masing-masing mewakili nama filem dan masa tayangan. Kini kami telah berjaya merangkak semua maklumat filem dalam halaman ranking filem Maoyan.

  1. Simulasikan tingkah laku pengguna

Sebelum anti-rangkak, kita perlu memahami beberapa kaedah anti-rangkak yang biasa digunakan oleh tapak web, seperti menetapkan had kekerapan akses, menyekat IP, dll. Untuk mengelakkan mekanisme anti-crawler ini, kami perlu mensimulasikan tingkah laku biasa pengguna. Contohnya, apabila merangkak halaman ranking filem Maoyan, kita boleh menetapkan selang masa rawak untuk mensimulasikan gelagat manusia yang melayari web:

import time

interval = random.uniform(0, 3)
time.sleep(interval)

Dalam coretan kod ini, random.uniform(0, 3) bermaksud menjana nombor daripada 0 hingga 3 Nombor rawak antara, time.sleep(interval) bermaksud membiarkan program menunggu masa yang sepadan.

  1. Retak halaman pemuatan dinamik

Sesetengah tapak web menggunakan teknologi pemuatan dinamik dalam halaman mereka, yang bermaksud mereka perlu menggunakan bahasa skrip seperti JavaScript untuk menjana kandungan halaman secara dinamik . Jika kami terus menggunakan perpustakaan permintaan untuk mendapatkan halaman jenis ini, kami hanya boleh mendapatkan kod HTML statik dan tidak boleh mendapatkan kandungan yang dijana secara dinamik. Pada masa ini, kami boleh menggunakan perpustakaan Selenium untuk mensimulasikan operasi manusia supaya penyemak imbas boleh memuatkan kandungan halaman secara normal. Contohnya, jika kami ingin mendapatkan halaman ulasan Weibo, kami boleh menggunakan kod berikut:

from selenium import webdriver

url = 'https://weibo.com/xxxxxx'

browser = webdriver.Firefox()
browser.get(url)

time.sleep(10)

html = browser.page_source

Melalui kod di atas, kami boleh mendapatkan kandungan halaman yang lengkap, termasuk kawasan ulasan yang dijana oleh pemuatan dinamik.

Ringkasan

Artikel ini memperkenalkan cara menggunakan ungkapan biasa Python untuk merangkak dan anti-merangkak Kandungan utama termasuk:

  1. Memahami ungkapan biasa
  2. Merangkak kandungan web;
  3. Gunakan ungkapan biasa untuk pemadanan data;
  4. Saya harap petua ini dapat membantu anda merangkak dan menyahrangkak dengan lebih baik serta memperoleh lebih banyak data sasaran.

Atas ialah kandungan terperinci Cara menggunakan ungkapan biasa Python untuk merangkak dan anti-merangkak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn