Beranda BlogPengikisan web Cara mengotomatiskan web scraping hanya dengan beberapa klik

Cara mengotomatiskan web scraping hanya dengan beberapa klik

oleh Kadek

Otomatiskan pengiriman data melalui webhook

Yang paling saya sukai dari DataPipeline adalah kemampuannya untuk mengirimkan data langsung ke aplikasi saya menggunakan webhook. Webhook ini bertindak sebagai titik akhir tempat DataPipeline mengirimkan data yang diambil, sehingga menghilangkan kebutuhan untuk mengunduh dan mentransfer data secara manual.

Menyiapkan webhook

Sebelum Anda dapat menggunakan fungsi webhook di DataPipeline, Anda harus menyiapkan URL webhook. Untuk mempermudah, saya akan menunjukkan dua opsi:

  • Opsi tanpa kode – ideal untuk pengujian atau proyek serius dalam versi berbayar

  • Penyiapan webhook tingkat lanjut dengan Flask dan Ngrok

Penyiapan webhook tanpa kode

Solusi sederhana untuk memulai webhook dengan cepat adalah dengan menggunakan Webhook.site. Saat Anda mengunjungi situs tersebut, URL webhook unik dibuat secara otomatis. Salin URL ini sebagai titik akhir webhook Anda untuk mendapatkan hasil pengikisan.

Menyiapkan pengaturan webhookMenyiapkan pengaturan webhook

Ini memungkinkan Anda menguji dan melihat data masuk dengan cepat dan mudah.

Pengikisan webhook menghasilkan data masuk Pengikisan webhook menghasilkan data masuk

Namun, tanpa paket berbayar, Webhook.site hanya menyimpan data selama 7 hari, setelah itu akan dibuang.

Menyiapkan webhook dengan Flask dan Ngrok

Meskipun memeriksa konten payload webhook dapat berguna (misalnya dengan meneruskan webhook ke alat seperti webhook.site), pengembang juga memerlukan kemampuan untuk menerima webhook yang masuk langsung ke dalam aplikasi mereka.

Berikut cara melakukannya dengan Flask, kerangka web ringan untuk Python, dan Ngrok, alat yang mengekspos server lokal ke internet publik:

  1. Untuk memasang Botol Dan Ngrok

Anda dapat menginstal Flask dengan pip:

Bagaimana cara menginstall Ngrok

  • Di Windows (dengan Cokelat):
  • Di macOS (dengan Homebrew):

Anda dapat mengunduh Ngrok untuk sistem operasi lain langsung dari situs resminya.

  1. Konfigurasikan token autentikasi Anda (pengaturan satu kali)

Untuk menggunakan Ngrok, Anda harus menghubungkannya ke akun Anda menggunakan token otentikasi. Dapatkan token asli Anda dari dasbor Ngrok Anda.

Konfigurasikan token autentikasi AndaKonfigurasikan token autentikasi Anda

Buka terminal atau command prompt Anda dan jalankan perintah berikut.
$YOUR_AUTHTOKEN dengan token autentikasi Anda yang sebenarnya:


  ngrok config add-authtoken $YOUR_AUTHTOKEN

  1. Buat server webhook Flask

Mari buat aplikasi Flask sederhana untuk memproses permintaan webhook yang masuk. Simpan kode berikut dalam file bernama webhook.py


  from flask import Flask, request, jsonify
  import csv
  import io
  import zipfile
  from werkzeug.utils import secure_filename
  
  app = Flask(__name__)
  
  @app.route('/webhook', methods=('POST'))
  def webhook():
      content_type = request.headers.get('Content-Type')
  
      if content_type == 'application/json':
          data = request.json
          print("Received JSON data:", data)
      elif content_type == 'text/csv':
          data = request.data.decode('utf-8')
          csv_reader = csv.reader(io.StringIO(data))
          csv_data = (row for row in csv_reader)
          print("Received CSV data:", csv_data)
      elif content_type.startswith('multipart/form-data'):
          files = request.files
          for filename, file in files.items():
              print(f"Received file: {filename}")
              file.save(secure_filename(file.filename))
              if filename.endswith('.zip'):
                  with zipfile.ZipFile(file, 'r') as zip_ref:
                      zip_ref.extractall('extracted_files')
                      print(f"Extracted files: {zip_ref.namelist()}")
      elif content_type == 'application/zip':
          file = request.data
          with open('received.zip', 'wb') as f:
              f.write(file)
          with zipfile.ZipFile(io.BytesIO(file), 'r') as zip_ref:
              zip_ref.extractall('extracted_files')
              print(f"Extracted files: {zip_ref.namelist()}")
      else:
          data = request.data.decode('utf-8')
          print("Received raw data:", data)
      # process the data as needed - eg add to a database/ perform analysis
      return jsonify({'status': 'success', 'data': 'Processed data'}), 200
  
  if __name__ == '__main__':
      app.run(port=5000)

Kode ini membuat aplikasi Flask sederhana yang mendengarkan permintaan POST masuk di titik akhir /webhook. Itu dapat menangani berbagai jenis konten, mis. B.JSON, CSV, data mentah dan file ZIP. Itu juga mengekstrak dan menyimpan data yang diterima di direktori kerja saat ini. Data dapat diproses lebih lanjut jika diperlukan, misalnya. B. dengan menyimpan atau menganalisisnya dalam database.

  1. Menjalankan aplikasi Flask

Anda sekarang dapat menjalankan aplikasi Flask Anda:

  1. Mulai Ngrok

Buka jendela terminal baru dan mulai Ngrok untuk mengekspos server Flask lokal Anda:

Ngrok menghasilkan URL publik yang meneruskan permintaan ke aplikasi Flask lokal Anda. Salin “Penerusan"" URL yang disediakan Ngrok; Anda menggunakan URL ini sebagai titik akhir webhook Anda di DataPipeline.

Ngrok menghasilkan permintaan pengalihan URLNgrok menghasilkan permintaan pengalihan URL
  1. Tambahkan webhook ke DataPipeline

Di pengaturan proyek DataPipeline Anda, cari pengaturan output:

Menambahkan webhook ke DataPipelineMenambahkan webhook ke DataPipeline

Pilih “Webhook” sebagai metode pilihan, tempelkan URL webhook yang disediakan oleh Ngrok dan tambahkan titik akhir “/webhook” ke dalamnya.

Memilih webhook sebagai output di DataPipelineMemilih webhook sebagai output di DataPipeline

DataPipeline secara otomatis mengirimkan data yang diambil ke URL webhook Anda.


  Received file: result
  127.0.0.1 - - (25/Jun/2024 15:32:36) "POST /webhook HTTP/1.1" 200 -
  Extracted files: ('job-11814822-result.jsonl')

Anda dapat mengonfigurasi layanan atau server webhook untuk memproses data sesuai kebutuhan, baik dengan menyimpannya di database, mengirimkan notifikasi, atau memicu tindakan otomatis lainnya.


  (
  {
      "input": "B0CHJ5LJZG",
      "result": {
          "name": "Wireless Earbuds, 2024 Wireless Headphones HiFi Stereo Earphones with 4 ENC Noise Canceling Mic, 42Hs Playtime In Ear Earbud, Bluetooth 5.3 Sport Earphones with LED Power Display for Android iOS White",
          "product_information": {
              "model_name": "A60PW-USM",
              "connectivity_technology": "Wireless",
              "wireless_communication_technology": "Bluetooth",
              "special_feature": "Lightweight, Noise Isolation, Volume-Control, Microphone Feature, Sports & Exercise",
              "included_components": "Charging case *1, Type-C Charging Cable*1, User Manual*1, 3 Pairs of Ear Tips(S M L ), Wireless Earbuds*2",
              "age_range_description": "Adult",
              "material": "Plastic",
              "specific_uses_for_product": "Sports & Exercise, Running",
              "charging_time": "1.5 Hours",
              "compatible_devices": "Compatible devices with Bluetooth 5.3 or earlier, … (TRUNCATED)",
              "control_type": "Media Control",
              "cable_feature": "Without Cable",
              "item_weight": "0.634 ounces",
              "control_method": "Touch, Voice",
              "number_of_items": "1",
              "audio_driver_type": "Dynamic Driver",
              "bluetooth_range": "15 Meters",
              "bluetooth_version": "5.3",
              "carrying_case_battery_charging_time": "1.5 Hours",
              "audio_driver_size": "13 Millimeters",
              "earpiece_shape": "Rounded Tip",
              "manufacturer": "Aoslen",
              "package_dimensions": "4.17 x 3.27 x 1.46 inches",
              "asin": "B0CHJ5LJZG",
              "item_model_number": "A60Pro",
              "batteries": "1 Lithium Ion batteries required. (included)",
              "customer_reviews": {
                  "ratings_count": 3154,
                  "stars": 4.5
              },
              "best_sellers_rank": (
                  "#267 in Electronics (See Top 100 in Electronics)",
                  "#48 in Earbud & In-Ear Headphones"
              ),
              "date_first_available": "September 7, 2023"
          },
          "brand": "Brand: Aoslen",
          "brand_url": "https://www.amazon.com/Aoslen/b/ref=bl_dp_s_web_38765055011?ie=UTF8&node=38765055011&field-lbr_brands_browse-bin=Aoslen",
          "full_description": "From the brand Aoslen Wireless Earbuds                                      If you have any questions, … (TRUNCATED)",
          "pricing": "$19.99",
          "list_price": "$49.99",
          "shipping_price": "FREE",
          "availability_status": "In Stock",
          "is_coupon_exists": false,
          "images": (
              "https://m.media-amazon.com/images/I/41nBiguTHfL.jpg", (TRUNCATED)
          ),
          "product_category": "Electronics \u203a Headphones, Earbuds & Accessories \u203a Headphones & Earbuds \u203a Earbud Headphones",
          "average_rating": 4.5,
          "feature_bullets": (
              "2024 New Bluetooth 5.3 Technology: Bluetooth in ear headphones equipped with new version of bluetooth 5.3 chip, using better chip and technology. Transmit high quality lossless audio coding, ensure more stable connection, lower latency and lower power consumption during data transmission. With a stable connection distance of up to 15 meters, you can easily control your music and phone at home, in the office and on the go", (TRUNCATED)
          ),
          "total_reviews": 3154,
          "model": "A60Pro",
          "customization_options": {
              "color": (
                  {
                      "is_selected": false,
                      "url": "https://www.amazon.com/dp/B0BVQG2LVW/ref=twister_B0D14MT3VB?_encoding=UTF8&psc=1",
                      "value": "Black",
                      "price_string": "$19.99",
                      "price": 19.99,
                      "image": "https://m.media-amazon.com/images/I/41cGPiRmLHL.jpg"
                  }, (TRUNCATED)
              )
          },
          "ships_from": "Amazon",
          "sold_by": "Aoslen US",
          "aplus_present": true
      }
  },
)

Mengikis daftar dinamis halaman web

Kemampuan DataPipeline untuk menerima webhook sebagai masukan membuka tingkat otomatisasi baru untuk proyek pengikisan web Anda. Sekarang Anda dapat mengikis daftar dinamis URL, ASIN, ID produk, atau bahkan kueri penelusuran tanpa harus memperbarui proyek DataPipeline Anda secara manual.

Bayangkan Anda ingin melacak hasil pencarian Google untuk daftar pertanyaan parfum yang berubah secara berkala. Daripada memperbarui proyek Anda secara manual di DataPipeline setiap kali daftar Anda berubah, Anda dapat mengotomatiskan seluruh proses.

Buat webhook untuk melayani permintaan pencarian

Mari buat titik akhir webhook menggunakan Flask untuk memberikan daftar kueri penelusuran ke DataPipeline. Saya menyimpan penelusuran saya dalam file CSV, namun Anda dapat dengan mudah menyesuaikannya untuk menarik kueri dari database atau sumber dinamis lainnya.

  1. A… buat parfum_queries.csv mengajukan

Buat file CSV bernama parfum_queries.csv dan tambahkan daftar permintaan pencarian Anda, satu per baris (tidak termasuk header). Contoh:


  Perfume
  Blue de Chanel
  Dior Sauvage
  Gucci Guilty 
  Versace Eros 
  Calvin Klein Euphoria
  Marc Jacobs Daisy
  Yves Saint Laurent Black Opium
  Tom Ford Black Orchid
  Initio Oud For Greatness
  Paco Rabanne 1 Million

  1. Buat webhook Flask:

Buat file Python (mis. query_webhook.py) dan tambahkan kode Flask berikut:


  from flask import Flask, jsonify
  import csv
  
  app = Flask(__name__)
  
  def read_queries_from_csv(filepath):
      with open(filepath, newline='', encoding='utf-8') as csvfile:
          reader = csv.reader(csvfile)
          next(reader)  # Skip the header row
          queries = (row(0) for row in reader if row)  # One query per row
      return queries
  
  @app.route('/queries', methods=('GET'))
  def provide_queries(): 
      queries = read_queries_from_csv('perfume_queries.csv')
      return jsonify(queries)
  
  if __name__ == '__main__':
      app.run(debug=True, port=5000)

Di sini kami mendefinisikan aplikasi Flask dengan “Rute/pertanyaan“, yang membaca kueri penelusuran dari file CSV Anda dan mengembalikannya dalam format JSON.

  1. Jalankan aplikasi Flask:

Luncurkan aplikasi Flask Anda:


  python queries_webhook.py

  1. Berpameran bersama Ngrok:

Gunakan Ngrok (seperti yang dijelaskan di bagian sebelumnya) untuk membuat URL yang dapat diakses publik untuk webhook Flask lokal Anda:

Salin URL pengalihan yang disediakan oleh Ngrok.

Ngrok menghasilkan permintaan pengalihan URLNgrok menghasilkan permintaan pengalihan URL

Buat proyek Google Penelusuran di DataPipeline

Buka dasbor DataPipeline Anda dan buat proyek baru dengan “pencarian Google" Templat.

Membuat proyek Google Penelusuran di DataPipelineMembuat proyek Google Penelusuran di DataPipeline

Daripada memasukkan istilah pencarian secara manual, tempelkan URL pengalihan Ngrok (menunjuk ke webhook /queries Anda) ke dalam kolom input di DataPipeline.

Memasukkan istilah pencarian di DataPipelineMemasukkan istilah pencarian di DataPipeline

DataPipeline secara otomatis memanggil webhook Anda, mengambil daftar kueri penelusuran terbaru, dan menggunakannya sebagai masukan untuk mengambil hasil penelusuran Google. Sekarang Anda memiliki saluran yang sepenuhnya otomatis di mana semua pembaruan untuk Anda
parfum_queries.csv File akan muncul di data Anda yang tergores tanpa intervensi manual apa pun!

Baca juga: Cara mengikis Google Belanja dengan Python

Bungkus

Dalam panduan ini, saya menunjukkan kepada Anda cara mengotomatiskan web scraping dengan DataPipeline ScraperAPI.

  • Anda mempelajari cara mengotomatiskan proyek scraping dengan DataPipeline,
  • Konfigurasikan data masukan secara dinamis dengan webhook,
  • Otomatiskan pengiriman data melalui webhook

DataPipelines menyederhanakan web scraping dan mempermudah pengumpulan data yang Anda perlukan dalam skala besar. Siap mencobanya? Daftar untuk mendapatkan akun ScraperAPI gratis dan coba DataPipeline hari ini. Sampai jumpa lagi, selamat menggores!

Pos terkait

Tinggalkan Komentar