Rumah >pembangunan bahagian belakang >Tutorial Python >Analisis kod contoh pengenalan teknologi crawler Python

Analisis kod contoh pengenalan teknologi crawler Python

王林
王林ke hadapan
2023-04-22 13:04:071288semak imbas

Konsep asas teknologi perangkak

  1. Perangkak: program yang memperoleh data rangkaian secara automatik.

  2. Struktur halaman web: HTML, CSS, JavaScript, dsb.

  3. Permintaan HTTP: Cara pelanggan meminta data daripada pelayan.

  4. Respons HTTP: Data yang dikembalikan oleh pelayan kepada klien.

Permintaan dan Respons

Gunakan perpustakaan permintaan Python untuk menghantar permintaan HTTP.

import requests
 
url = "https://www.example.com"
response = requests.get(url)

Dapatkan kandungan respons

html_content = response.text

Penghuraian HTML dan pengekstrakan data

Gunakan perpustakaan BeautifulSoup untuk menghuraikan kandungan HTML.

from bs4 import BeautifulSoup
 
soup = BeautifulSoup(html_content, "html.parser")

Gunakan pemilih CSS atau kaedah lain untuk mengekstrak data.

title = soup.title.string

Pertempuran praktikal: Rangka maklumat artikel di halaman utama laman web Jianshu

Hantar permintaan untuk mendapatkan kandungan HTML halaman utama laman web Jianshu.

import requests
from bs4 import BeautifulSoup
 
url = "https://www.jianshu.com"
response = requests.get(url)
html_content = response.text

Simpan data

Simpan data dalam format JSON.

import json
 
with open("jianshu_articles.json", "w", encoding="utf-8") as f:
    json.dump(article_info_list, f, ensure_ascii=False, indent=4)

Pengujian dan Pengoptimuman

1 Apabila menghadapi strategi anti-crawler, anda boleh menggunakan User-Agent untuk berpura-pura menjadi penyemak imbas.

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)

2. Gunakan fungsi time.sleep() untuk mengawal kekerapan permintaan.

import time
 
time.sleep(10)

3. Ralat pengendalian dan penangkapan pengecualian.

try:
    response = requests.get(url, headers=headers, timeout=5)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")

Kod lengkap untuk perangkak tapak web:

import requests
from bs4 import BeautifulSoup
import json
import time
 
def fetch_jianshu_articles():
    url = "https://www.jianshu.com"
    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"}
 
    try:
        response = requests.get(url, headers=headers, timeout=5)
        response.raise_for_status()
    except requests.exceptions.RequestException as e:
        print(f"Error: {e}")
        return
 
    html_content = response.text
    soup = BeautifulSoup(html_content, "html.parser")
    articles = soup.find_all("div", class_="content")
    article_info_list = []
 
    for article in articles:
        title = article.h3.text.strip()
        author = article.find("span", class_="name").text.strip()
        link = url + article.h3.a["href"]
 
        article_info = {"title": title, "author": author, "link": link}
        article_info_list.append(article_info)
 
    return article_info_list
 
def save_to_json(article_info_list, filename):
    with open(filename, "w", encoding="utf-8") as f:
        json.dump(article_info_list, f, ensure_ascii=False, indent=4)
 
if __name__ == "__main__":
    article_info_list = fetch_jianshu_articles()
    if article_info_list:
        save_to_json(article_info_list, "jianshu_articles.json")
        print("Jianshu articles saved to 'jianshu_articles.json'.")
    else:
        print("Failed to fetch Jianshu articles.")

Tambahan

Untuk lebih memahami projek praktikal ini, kita perlu memahami beberapa konsep dan prinsip asas, yang akan Membantu menguasai teknologi pengaturcaraan rangkaian dan perangkak Python. Berikut ialah beberapa konsep asas rangkak web:

  1. HTTP Protocol: Hypertext Transfer Protocol (HTTP) ialah protokol lapisan aplikasi yang digunakan untuk menghantar dokumen hipermedia seperti HTML. Protokol HTTP digunakan untuk menghantar atau menghantar data dari pelayan web ke pelayar web atau klien lain.

  2. HTML, CSS dan JavaScript: HTML ialah bahasa yang digunakan untuk menerangkan halaman web. CSS ialah gaya yang digunakan untuk menyatakan struktur HTML. JavaScript ialah bahasa skrip untuk pengaturcaraan web, terutamanya digunakan untuk mencapai kesan dinamik pada halaman web dan berinteraksi dengan pengguna.

  3. DOM: Model Objek Dokumen (DOM) ialah antara muka pengaturcaraan merentas platform untuk memproses dokumen HTML dan XML. DOM menganggap dokumen sebagai struktur pokok, di mana setiap nod mewakili bahagian (seperti elemen, atribut atau teks).

  4. URL: Pencari Sumber Seragam (URL) ialah rentetan aksara yang digunakan untuk menentukan lokasi sumber Internet.

  5. Pengepala Permintaan: Dalam permintaan HTTP, pengepala permintaan mengandungi maklumat tentang persekitaran pelanggan, penyemak imbas, dsb. Medan pengepala permintaan biasa termasuk: Ejen Pengguna, Terima, Perujuk, dsb.

  6. Pengepala Respons: Dalam respons HTTP, pengepala respons mengandungi maklumat tentang pelayan, kod status respons dan maklumat lain. Medan pengepala respons biasa termasuk: Jenis Kandungan, Panjang Kandungan, Pelayan, dsb.

  7. Strategi perangkak web: Sesetengah tapak web akan menggunakan beberapa strategi untuk menghalang perangkak daripada merebut data, seperti: menyekat IP, mengehadkan kelajuan akses, menggunakan JavaScript untuk memuatkan data secara dinamik, dsb. Dalam aplikasi praktikal, kami perlu mengambil langkah balas yang sepadan berdasarkan strategi ini, seperti menggunakan IP proksi, mengehadkan kelajuan merangkak perangkak, menggunakan perpustakaan simulasi penyemak imbas (seperti Selenium), dsb.

Atas ialah kandungan terperinci Analisis kod contoh pengenalan teknologi crawler Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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