Masalah dan penyelesaian perangkak web biasa dalam Python
Ikhtisar:
Dengan perkembangan Internet, perangkak web telah menjadi alat penting untuk pengumpulan data dan analisis maklumat. Python, sebagai bahasa pengaturcaraan yang mudah, mudah digunakan dan berkuasa, digunakan secara meluas dalam pembangunan perangkak web. Walau bagaimanapun, dalam proses pembangunan sebenar, kita sering menghadapi beberapa masalah. Artikel ini akan memperkenalkan masalah perangkak web biasa dalam Python, menyediakan penyelesaian yang sepadan dan melampirkan contoh kod.
1. Strategi anti-crawler
Anti-crawler bermaksud bahawa untuk melindungi kepentingannya sendiri, tapak web mengambil beberapa langkah untuk menyekat akses perangkak ke tapak web. Strategi anti-perakak biasa termasuk larangan IP, kod pengesahan, sekatan log masuk, dsb. Berikut ialah beberapa penyelesaian:
import requests def get_html(url): proxy = { 'http': 'http://username:password@proxy_ip:proxy_port', 'https': 'https://username:password@proxy_ip:proxy_port' } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } try: response = requests.get(url, proxies=proxy, headers=headers) if response.status_code == 200: return response.text else: return None except requests.exceptions.RequestException as e: return None url = 'http://example.com' html = get_html(url)
import requests import random def get_html(url): user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' ] headers = { 'User-Agent': random.choice(user_agents) } try: response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: return None except requests.exceptions.RequestException as e: return None url = 'http://example.com' html = get_html(url)
2. Penghuraian halaman
Semasa merangkak data, kita selalunya perlu menghuraikan halaman dan mengekstrak maklumat yang diperlukan. Berikut ialah beberapa masalah penghuraian halaman biasa dan penyelesaian yang sepadan:
import requests from bs4 import BeautifulSoup def get_html(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } try: response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: return None except requests.exceptions.RequestException as e: return None def get_info(html): soup = BeautifulSoup(html, 'html.parser') title = soup.title.text return title url = 'http://example.com' html = get_html(url) info = get_info(html)
from selenium import webdriver def get_html(url): driver = webdriver.Chrome('path/to/chromedriver') driver.get(url) html = driver.page_source return html def get_info(html): # 解析获取所需信息 pass url = 'http://example.com' html = get_html(url) info = get_info(html)
Di atas ialah gambaran keseluruhan masalah perangkak web biasa dan penyelesaian dalam Python. Dalam proses pembangunan sebenar, lebih banyak masalah mungkin dihadapi bergantung pada senario yang berbeza. Saya harap artikel ini dapat memberi pembaca sedikit rujukan dan bantuan dalam pembangunan perangkak web.
Atas ialah kandungan terperinci Masalah dan penyelesaian perangkak web biasa dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!