Daftar Isi
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.
Ini memungkinkan Anda menguji dan melihat data masuk dengan cepat dan mudah.
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:
- 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.
- 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.
Buka terminal atau command prompt Anda dan jalankan perintah berikut.
$YOUR_AUTHTOKEN
dengan token autentikasi Anda yang sebenarnya:
ngrok config add-authtoken $YOUR_AUTHTOKEN
- 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.
- Menjalankan aplikasi Flask
Anda sekarang dapat menjalankan aplikasi Flask Anda:
- 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.
- Tambahkan webhook ke DataPipeline
Di pengaturan proyek DataPipeline Anda, cari pengaturan output:
Pilih “Webhook” sebagai metode pilihan, tempelkan URL webhook yang disediakan oleh Ngrok dan tambahkan titik akhir “/webhook” ke dalamnya.
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.
- 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
- 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.
- Jalankan aplikasi Flask:
Luncurkan aplikasi Flask Anda:
python queries_webhook.py
- 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.
Buat proyek Google Penelusuran di DataPipeline
Buka dasbor DataPipeline Anda dan buat proyek baru dengan “pencarian Google" Templat.
Daripada memasukkan istilah pencarian secara manual, tempelkan URL pengalihan Ngrok (menunjuk ke webhook /queries Anda) ke dalam kolom input 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 telah menunjukkan caranya Pengikisan web mengotomatiskan DataPipeline dengan 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!