Rumah  >  Artikel  >  pangkalan data  >  Membina perangkak web dengan Python dan Redis: Cara menangani strategi anti-merangkak

Membina perangkak web dengan Python dan Redis: Cara menangani strategi anti-merangkak

WBOY
WBOYasal
2023-07-30 13:45:291202semak imbas

Membina perangkak web menggunakan Python dan Redis: Cara menangani strategi anti-crawler

Pengenalan:
Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat Internet, perangkak web telah menjadi salah satu cara penting untuk mendapatkan maklumat dan data. Walau bagaimanapun, untuk melindungi data mereka sendiri, banyak tapak web menggunakan pelbagai strategi anti-perakak, yang menyebabkan masalah untuk perangkak. Artikel ini akan memperkenalkan cara menggunakan Python dan Redis untuk membina perangkak web yang berkuasa dan menyelesaikan strategi anti perangkak biasa.

  1. Tetapan perangkak asas
    Pertama, kita perlu memasang perpustakaan berkaitan, seperti permintaan, beautifulsoup dan redis-py. Berikut ialah contoh kod mudah untuk menetapkan parameter asas perangkak dan memulakan sambungan Redis:
import requests
from bs4 import BeautifulSoup
import redis

# 设置爬虫的基本参数
base_url = "https://example.com"  # 待爬取的网站
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"  # 设置User-Agent

# 初始化Redis连接
redis_host = "localhost"  # Redis主机地址
redis_port = 6379  # Redis端口号
r = redis.StrictRedis(host=redis_host, port=redis_port, db=0)
  1. Memproses maklumat pengepala permintaan
    Salah satu strategi anti perangkak adalah untuk mengesan Ejen Pengguna dalam pengepala permintaan untuk tentukan sama ada permintaan itu datang daripada pelayar sebenar. Kami boleh menetapkan Agen Pengguna yang sesuai dalam kod untuk mensimulasikan permintaan penyemak imbas, seperti user_agent dalam kod di atas.
headers = {
    "User-Agent": user_agent
}
  1. Mengendalikan Proksi IP
    Banyak tapak web akan mengehadkan kekerapan permintaan untuk alamat IP yang sama atau menyediakan senarai putih akses. Untuk memintas had ini, kami boleh menggunakan kumpulan IP proksi. Di sini Redis digunakan untuk menyimpan IP proksi, dan kemudian IP dipilih secara rawak pada setiap permintaan.
# 从Redis中获取代理IP
proxy_ip = r.srandmember("proxy_ip_pool")

proxies = {
    "http": "http://" + proxy_ip,
    "https": "https://" + proxy_ip
}
  1. Memproses kod pengesahan
    Untuk mengelakkan rangkak automatik, sesetengah tapak web akan menetapkan kod pengesahan untuk mengesahkan ketulenan pengguna. Kami boleh menggunakan perpustakaan pihak ketiga seperti Bantal untuk mengendalikan kod pengesahan, atau menggunakan alatan sumber terbuka seperti Tesseract untuk pengecaman imej.
# 处理验证码,此处以Pillow库为例
from PIL import Image
import pytesseract

# 下载验证码图片
captcha_url = base_url + "/captcha.jpg"
response = requests.get(captcha_url, headers=headers, proxies=proxies)
# 保存验证码图片
with open("captcha.jpg", "wb") as f:
    f.write(response.content)
# 识别验证码
captcha_image = Image.open("captcha.jpg")
captcha_text = pytesseract.image_to_string(captcha_image)
  1. Kendalikan kandungan yang dimuatkan secara dinamik
    Banyak tapak web menggunakan teknologi pemuatan dinamik (seperti AJAX) untuk memuatkan beberapa atau semua kandungan. Untuk kes ini, kita boleh menggunakan alatan yang mensimulasikan pelaksanaan penyemak imbas kod JavaScript, seperti Selenium atau Puppeteer.
from selenium import webdriver

# 使用Selenium模拟浏览器访问
driver = webdriver.Chrome()
driver.get(base_url)
# 等待页面加载完成
time.sleep(3)
# 获取页面源码
page_source = driver.page_source
# 使用BeautifulSoup解析页面
soup = BeautifulSoup(page_source, "html.parser")
  1. Mengendalikan log masuk akaun
    Sesetengah tapak web memerlukan pengguna log masuk sebelum mereka boleh mengakses kandungan Kami boleh menggunakan Selenium untuk mengisi borang log masuk secara automatik dan menyerahkannya.
# 填写登录表单
driver.find_element_by_id("username").send_keys("your_username")
driver.find_element_by_id("password").send_keys("your_password")
# 提交表单
driver.find_element_by_id("submit").click()

Kesimpulan:
Dengan menggunakan Python dan Redis untuk membina perangkak web, kami boleh menangani strategi anti perangkak biasa dengan berkesan dan mencapai pemerolehan data yang lebih stabil dan cekap. Dalam aplikasi praktikal, pengoptimuman dan penyesuaian selanjutnya diperlukan berdasarkan strategi anti-perakak tapak web tertentu. Saya harap artikel ini dapat membantu kerja pembangunan perangkak anda.

Atas ialah kandungan terperinci Membina perangkak web dengan Python dan Redis: Cara menangani strategi anti-merangkak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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