Rumah > Artikel > pembangunan bahagian belakang > Mengikis Web Lanjutan dengan Python: Menangani JavaScript, Kuki dan CAPTCHA
Dalam era pembuatan keputusan berasaskan data, mengikis web telah menjadi kemahiran yang amat diperlukan untuk mengekstrak maklumat berharga daripada tapak web. Walau bagaimanapun, apabila tapak web menjadi lebih dinamik dan kompleks, teknik mengikis tradisional sering gagal menangkap semua data yang diperlukan. Di sinilah pengikisan web lanjutan dengan Python dimainkan. Artikel ini menyelidiki kerumitan berurusan dengan JavaScript, kuki dan CAPTCHA, yang merupakan cabaran biasa yang dihadapi oleh pengikis web. Melalui contoh dan teknik praktikal, kami meneroka cara perpustakaan Python seperti Selenium, permintaan dan BeautifulSoup boleh mengatasi halangan ini. Menjelang akhir artikel ini, kami akan mempunyai kit alat strategi untuk menavigasi kerumitan tapak web moden, membolehkan anda mengekstrak data dengan cekap dan berkesan.
Banyak tapak web moden sangat bergantung pada JavaScript untuk memuatkan kandungan secara dinamik. Ini boleh menyebabkan masalah untuk teknik mengikis web tradisional, kerana data yang diperlukan mungkin tidak terdapat dalam kod sumber HTML. Nasib baik, terdapat alat dan perpustakaan tersedia dalam Python yang boleh membantu kami mengatasi cabaran ini.
Rangka kerja automasi penyemak imbas yang berkuasa ialah alat yang membolehkan kami berinteraksi dengan halaman web seperti pengguna manusia. Untuk menggambarkan kefungsiannya, mari kita terokai contoh senario di mana matlamat kita adalah untuk mendapatkan harga produk daripada tapak web e-dagang. Coretan kod berikut menunjukkan cara mengekstrak data dengan cekap menggunakan Selenium.
from selenium import webdriver # Set up the browser driver = webdriver.Chrome() # Navigate to the webpage driver.get('https://www.example.com/products') # Find the price elements using XPath price_elements = driver.find_elements_by_xpath('//span[@class="price"]') # Extract the prices prices = [element.text for element in price_elements] # Print the prices for price in prices: print(price) # Close the browser driver.quit()
Dalam contoh ini, kami memanfaatkan kuasa Selenium untuk menavigasi ke halaman web, menggunakan XPath untuk mencari elemen harga dan mengekstrak harga. Dengan cara ini, kami boleh mengikis data daripada tapak web yang sangat bergantung pada JavaScript dengan mudah.
Tapak web menggunakan kuki untuk menyimpan fail data kecil pada komputer atau peranti pengguna. Ia digunakan untuk pelbagai tujuan, seperti mengingati pilihan pengguna, sesi penjejakan dan menyampaikan kandungan yang diperibadikan. Apabila merangkak tapak web yang bergantung pada kuki, adalah perlu untuk mengendalikannya dengan sewajarnya untuk mengelakkan kemungkinan sekatan atau pengambilan data yang tidak tepat.
Pustaka permintaan dalam Python menyediakan fungsi untuk mengendalikan kuki. Kami boleh membuat permintaan awal ke tapak web, mendapatkan kuki, dan kemudian memasukkannya dalam permintaan seterusnya untuk mengekalkan sesi. Berikut ialah contoh -
import requests # Send an initial request to obtain the cookies response = requests.get('https://www.example.com') # Get the cookies from the response cookies = response.cookies # Include the cookies in subsequent requests response = requests.get('https://www.example.com/data', cookies=cookies) # Extract and process the data from the response data = response.json() # Perform further operations on the data
Dengan mengendalikan kuki dengan betul, kami boleh merangkak tapak yang memerlukan ketekunan sesi atau mempunyai kandungan khusus pengguna.
CAPTCHA direka untuk membezakan antara skrip manusia dan skrip automatik, yang mewujudkan cabaran untuk alat mengikis web. Untuk mengatasi masalah ini, kami boleh menyepadukan menggunakan perkhidmatan penghuraian CAPTCHA pihak ketiga dengan API. Berikut ialah contoh menggunakan perkhidmatan penghuraian kod pengesahan pihak ketiga menggunakan perpustakaan permintaan Python.
import requests captcha_url = 'https://api.example.com/solve_captcha' payload = { image_url': 'https://www.example.com/captcha_image.jpg', api_key': 'your_api_key' } response = requests.post(captcha_url, data=payload) captcha_solution = response.json()['solution'] scraping_url = 'https://www.example.com/data' scraping_payload = { 'captcha_solution': captcha_solution } scraping_response = requests.get(scraping_url, params=scraping_payload) data = scraping_response.json()
Sesetengah tapak web menggunakan penapisan ejen pengguna untuk mengelakkan merangkak. Ejen pengguna ialah rentetan pengenalpastian yang dihantar oleh penyemak imbas ke pelayan tapak web untuk mengenal pasti dirinya. Secara lalai, perpustakaan permintaan Python menggunakan rentetan ejen pengguna untuk menunjukkan bahawa ia adalah skrip mengikis. Walau bagaimanapun, kami boleh mengubah suai rentetan ejen pengguna untuk meniru penyemak imbas biasa, dengan itu memintas penapisan ejen pengguna.
Ini adalah contoh
import requests # Set a custom user-agent string headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'} # Send a request with the modified user-agent response = requests.get('https://www.example.com', headers=headers) # Process the response as needed
Menggunakan rentetan ejen pengguna yang terkenal daripada penyemak imbas popular, kami boleh menjadikan permintaan rangkak kami kelihatan lebih seperti trafik pengguna biasa, sekali gus mengurangkan peluang untuk disekat atau dikesan.
Satu lagi cabaran biasa dalam mengikis web ialah berurusan dengan tapak web yang menggunakan permintaan AJAX untuk memuatkan kandungan secara dinamik. AJAX (Asynchronous JavaScript and XML) membenarkan tapak web mengemas kini bahagian halaman tanpa memerlukan muat semula penuh. Apabila merangkak tapak sedemikian, kami perlu mengenal pasti permintaan AJAX yang bertanggungjawab untuk mendapatkan data yang diperlukan dan mensimulasikan permintaan ini dalam skrip rangkak. Berikut adalah contoh.
import requests from bs4 import BeautifulSoup # Send an initial request to the webpage response = requests.get('https://www.example.com') # Extract the dynamic content URL from the response soup = BeautifulSoup(response.text, 'html.parser') dynamic_content_url = soup.find('script', {'class': 'dynamic-content'}).get('src') # Send a request to the dynamic content URL response = requests.get(dynamic_content_url) # Extract and process the data from the response data = response.json() # Perform further operations on the data
Dalam contoh ini, kami mula-mula meminta halaman web dan menghuraikan respons menggunakan BeautifulSoup. Dengan menggunakan BeautifulSoup, kami boleh mengekstrak URL yang dikaitkan dengan kandungan dinamik daripada HTML yang dihuraikan. Kami kemudiannya meneruskan untuk menghantar permintaan lain secara khusus kepada URL kandungan dinamik.
Ringkasnya, kami telah meneroka teknik lanjutan untuk mengikis web dengan Python, memfokuskan pada pengendalian JavaScript, kuki, CAPTCHA, spoofing ejen pengguna dan kandungan dinamik. Dengan menguasai teknik ini, kami boleh mengatasi pelbagai cabaran yang ditimbulkan oleh laman web moden dan mengekstrak data berharga dengan berkesan. Ingat, pengikisan web boleh menjadi alat yang berkuasa, tetapi ia harus sentiasa digunakan secara bertanggungjawab dan beretika untuk mengelak daripada menyebabkan bahaya atau melanggar privasi. Dengan pemahaman mendalam tentang teknologi canggih ini dan komitmen terhadap pengikisan beretika, anda boleh membuka kunci dunia data berharga untuk analisis, penyelidikan dan membuat keputusan.
Atas ialah kandungan terperinci Mengikis Web Lanjutan dengan Python: Menangani JavaScript, Kuki dan CAPTCHA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!