Rumah > pembangunan bahagian belakang > Tutorial Python > Teknik Merangkak Web Python lanjutan untuk Pengumpulan Data yang Cekap

Teknik Merangkak Web Python lanjutan untuk Pengumpulan Data yang Cekap

Patricia Arquette
Lepaskan: 2025-01-14 20:19:46
asal
318 orang telah melayarinya

dvanced Python Web Crawling Techniques for Efficient Data Collection

Sebagai pengarang yang prolifik, saya menjemput anda untuk meneroka penerbitan Amazon saya. Ingat untuk mengikuti profil Medium saya untuk sokongan berterusan. Pertunangan anda tidak ternilai!

Pengekstrakan data yang cekap daripada web adalah kritikal. Keupayaan teguh Python menjadikannya ideal untuk mencipta perangkak web berskala dan berkesan. Artikel ini memperincikan lima teknik lanjutan untuk meningkatkan dengan ketara projek mengikis web anda.

1. Merangkak Asynchronous dengan asyncio dan aiohttp:

Pengaturcaraan tak segerak mempercepatkan merangkak web secara mendadak. Pustaka asyncio Python, ditambah dengan aiohttp, mendayakan permintaan HTTP serentak, meningkatkan kelajuan pengumpulan data.

Berikut ialah contoh rangkak tak segerak yang dipermudahkan:

<code class="language-python">import asyncio
import aiohttp
from bs4 import BeautifulSoup

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def parse(html):
    soup = BeautifulSoup(html, 'lxml')
    # Data extraction and processing
    return data

async def crawl(urls):
    async with aiohttp.ClientSession() as session:
        tasks = [fetch(session, url) for url in urls]
        pages = await asyncio.gather(*tasks)
        results = [await parse(page) for page in pages]
    return results

urls = ['http://example.com', 'http://example.org', 'http://example.net']
results = asyncio.run(crawl(urls))</code>
Salin selepas log masuk

asyncio.gather() membenarkan pelaksanaan serentak berbilang coroutine, secara drastik mengurangkan masa merangkak secara keseluruhan.

2. Merangkak Diedarkan dengan Scrapy dan ScrapyRT:

Untuk merangkak secara meluas, pendekatan yang diedarkan adalah sangat berfaedah. Scrapy, rangka kerja mengikis web yang berkuasa, digabungkan dengan ScrapyRT, memudahkan rangkak web teragih masa nyata.

Contoh labah-labah Scrapy asas:

<code class="language-python">import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    start_urls = ['http://example.com']

    def parse(self, response):
        for item in response.css('div.item'):
            yield {
                'title': item.css('h2::text').get(),
                'link': item.css('a::attr(href)').get(),
                'description': item.css('p::text').get()
            }

        next_page = response.css('a.next-page::attr(href)').get()
        if next_page:
            yield response.follow(next_page, self.parse)</code>
Salin selepas log masuk

Penyepaduan ScrapyRT melibatkan penyediaan pelayan ScrapyRT dan menghantar permintaan HTTP:

<code class="language-python">import requests

url = 'http://localhost:9080/crawl.json'
params = {
    'spider_name': 'example',
    'url': 'http://example.com'
}
response = requests.get(url, params=params)
data = response.json()</code>
Salin selepas log masuk

Ini membolehkan rangkak atas permintaan dan penyepaduan yang lancar dengan sistem lain.

3. Mengendalikan Kandungan yang Dihasilkan JavaScript dengan Selenium:

Banyak tapak web menggunakan JavaScript untuk pemaparan kandungan dinamik. Selenium WebDriver secara berkesan mengautomasikan penyemak imbas, berinteraksi dengan elemen JavaScript.

Contoh penggunaan selenium:

<code class="language-python">from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://example.com")

# Wait for element to load
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "dynamic-content"))
)

# Extract data
data = element.text

driver.quit()</code>
Salin selepas log masuk

Selenium adalah penting untuk merangkak aplikasi satu halaman atau tapak web dengan interaksi pengguna yang rumit.

4. Menggunakan Proksi dan Putaran IP:

Putaran proksi adalah penting untuk memintas pengehadan kadar dan larangan IP. Ini melibatkan kitaran melalui alamat IP yang berbeza untuk setiap permintaan.

Contoh penggunaan proksi:

<code class="language-python">import requests
from itertools import cycle

proxies = [
    {'http': 'http://proxy1.com:8080'},
    {'http': 'http://proxy2.com:8080'},
    {'http': 'http://proxy3.com:8080'}
]
proxy_pool = cycle(proxies)

for url in urls:
    proxy = next(proxy_pool)
    try:
        response = requests.get(url, proxies=proxy)
        # Process response
    except:
        # Error handling and proxy removal
        pass</code>
Salin selepas log masuk

Ini mengagihkan beban dan mengurangkan risiko disekat.

5. Penghuraian HTML yang cekap dengan Pemilih lxml dan CSS:

lxml dengan pemilih CSS menyediakan penghuraian HTML berprestasi tinggi.

Contoh:

<code class="language-python">from lxml import html
import requests

response = requests.get('http://example.com')
tree = html.fromstring(response.content)

# Extract data using CSS selectors
titles = tree.cssselect('h2.title')
links = tree.cssselect('a.link')

for title, link in zip(titles, links):
    print(title.text_content(), link.get('href'))</code>
Salin selepas log masuk

Ini jauh lebih pantas daripada BeautifulSoup, terutamanya untuk dokumen HTML yang besar.

Amalan dan Kebolehskalaan Terbaik:

  • Hormati robots.txt: Patuhi peraturan tapak web.
  • Merangkak sopan: Laksanakan kelewatan antara permintaan.
  • Gunakan ejen pengguna yang sesuai: Kenal pasti perangkak anda.
  • Pengendalian ralat yang teguh: Sertakan mekanisme cuba semula.
  • Storan data yang cekap: Gunakan pangkalan data atau format fail yang sesuai.
  • Baris gilir mesej (cth., Saderi): Urus kerja merangkak merentas berbilang mesin.
  • Merangkak sempadan: Urus URL dengan cekap.
  • Pemantauan prestasi: Kesan prestasi perangkak.
  • Penskalaan mendatar: Tambahkan lebih banyak nod merangkak mengikut keperluan.

Pengikisan web yang beretika adalah yang terpenting. Sesuaikan teknik ini dan terokai perpustakaan lain untuk memenuhi keperluan khusus anda. Perpustakaan Python yang luas memperkasakan anda untuk mengendalikan walaupun tugas merangkak web yang paling mencabar.


101 Buku

101 Buku, diasaskan bersama oleh pengarang Aarav Joshi, ialah sebuah syarikat penerbitan dikuasakan AI. Kos penerbitan kami yang rendah—sesetengah buku berharga $4—menjadikan pengetahuan berkualiti boleh diakses oleh semua.

Cari buku kami Kod Bersih Golang di Amazon.

Untuk kemas kini dan diskaun istimewa, cari Aarav Joshi di Amazon.

Ciptaan Kami

Terokai ciptaan kami:

Pusat Pelabur | Pelabur Central Spanish | Pelabur Jerman Tengah | Hidup Pintar | Epos & Gema | Misteri Membingungkan | Hindutva | Pembangunan Elit | Sekolah JS


Kami berada di Sederhana

Tech Koala Insights | Dunia Epok & Gema | Medium Pusat Pelabur | Medium Misteri Membingungkan | Sains & Zaman Sederhana | Hindutva Moden

Atas ialah kandungan terperinci Teknik Merangkak Web Python lanjutan untuk Pengumpulan Data yang Cekap. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan