Analisis kod contoh pengenalan teknologi crawler Python

王林
Lepaskan: 2023-04-22 13:04:07
ke hadapan
1248 orang telah melayarinya

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)
Salin selepas log masuk

Dapatkan kandungan respons

html_content = response.text
Salin selepas log masuk

Penghuraian HTML dan pengekstrakan data

Gunakan perpustakaan BeautifulSoup untuk menghuraikan kandungan HTML.

from bs4 import BeautifulSoup
 
soup = BeautifulSoup(html_content, "html.parser")
Salin selepas log masuk

Gunakan pemilih CSS atau kaedah lain untuk mengekstrak data.

title = soup.title.string
Salin selepas log masuk

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
Salin selepas log masuk

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)
Salin selepas log masuk

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)
Salin selepas log masuk

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

import time
 
time.sleep(10)
Salin selepas log masuk

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}")
Salin selepas log masuk

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.")
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
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