Masalah dan penyelesaian perangkak web biasa dalam Python

WBOY
Lepaskan: 2023-10-09 21:03:20
asal
1128 orang telah melayarinya

Masalah dan penyelesaian perangkak web biasa dalam Python

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:

  1. Gunakan IP proksi
    Anti-perakak sering dikenal pasti dan diharamkan oleh alamat IP, jadi kami boleh mendapatkan alamat IP yang berbeza melalui pelayan proksi untuk memintas strategi anti-perakak. Berikut ialah kod sampel menggunakan IP proksi:
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)
Salin selepas log masuk
  1. Menggunakan pengepala Ejen Pengguna secara rawak
    Anti-perakak boleh mengenal pasti akses perangkak dengan mengesan pengepala Ejen Pengguna. Kita boleh memintas strategi ini dengan menggunakan pengepala Agen Pengguna rawak. Berikut ialah kod sampel menggunakan pengepala Agen Pengguna rawak:
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)
Salin selepas log masuk

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:

  1. Penghuraian halaman statik
    Untuk halaman statik, kami boleh menggunakan beberapa perpustakaan dalam Python, seperti BeautifulSoup, XPath, dll., untuk menghuraikan. Berikut ialah contoh kod yang menggunakan BeautifulSoup untuk menghurai:
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)
Salin selepas log masuk
  1. Penghuraian halaman dinamik
    Untuk halaman dinamik yang diberikan menggunakan JavaScript, kami boleh menggunakan perpustakaan Selenium untuk mensimulasikan tingkah laku penyemak imbas dan mendapatkan halaman yang dipaparkan. Berikut ialah contoh kod menggunakan Selenium untuk penghuraian halaman dinamik:
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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan