Lazimnya, tutorial memfokuskan pada aspek teknikal, pada perkara yang boleh anda tiru: "Mula di sini, ikut laluan ini, dan anda akan berakhir di sini." Ini bagus untuk mempelajari teknologi tertentu, tetapi kadangkala sukar untuk memahami sebab pengarang memutuskan untuk melakukan sesuatu dengan cara tertentu atau perkara yang membimbing proses pembangunan mereka.
Salah seorang ahli komuniti kami menulis blog ini sebagai sumbangan kepada Crawlee Blog. Jika anda ingin menyumbangkan blog seperti ini kepada Crawlee Blog, sila hubungi kami di saluran perselisihan kami.
Dalam blog ini, saya akan membincangkan peraturan dan prinsip am yang membimbing saya apabila saya bekerja pada projek mengikis web dan membolehkan saya mencapai hasil yang hebat.
Jadi, mari kita terokai pemikiran pembangun web scraping.
Apabila anda mula mengerjakan projek, anda mungkin mempunyai tapak sasaran yang anda perlukan untuk mengekstrak data tertentu. Semak kemungkinan yang disediakan oleh tapak atau aplikasi ini untuk pengekstrakan data. Berikut adalah beberapa pilihan yang mungkin:
Jika satu sumber data gagal, cuba akses sumber lain yang tersedia.
Sebagai contoh, untuk Yelp, ketiga-tiga pilihan tersedia dan jika API Rasmi tidak sesuai dengan anda atas sebab tertentu, anda boleh mencuba dua yang lain.
Saya rasa semua orang tahu tentang robots.txt dan peta laman satu cara atau yang lain, tetapi saya kerap melihat orang ramai melupakan mereka. Jika anda mendengar tentang perkara ini buat kali pertama, berikut ialah penjelasan ringkas:
Memandangkan anda bukan Google atau mana-mana enjin carian popular lain, peraturan robot dalam robots.txt berkemungkinan akan menentang anda. Tetapi digabungkan dengan peta laman, ini adalah tempat yang baik untuk mengkaji struktur tapak, interaksi yang dijangkakan dengan robot dan ejen pengguna bukan penyemak imbas. Dalam sesetengah situasi, ia memudahkan pengekstrakan data daripada tapak.
Sebagai contoh, menggunakan peta tapak untuk tapak web Crawlee, anda boleh mendapatkan pautan terus ke siaran dengan mudah untuk sepanjang hayat blog dan untuk tempoh tertentu. Satu semakan mudah dan anda tidak perlu melaksanakan logik penomboran.
Analisis tapak yang teliti ialah prasyarat penting untuk mencipta pengikis web yang berkesan, terutamanya jika anda tidak merancang untuk menggunakan automasi penyemak imbas. Walau bagaimanapun, analisis sedemikian mengambil masa, kadang-kadang banyak.
Perlu diingat juga bahawa masa yang diluangkan untuk analisis dan mencari penyelesaian rangkak yang lebih optimum tidak selalu membuahkan hasil - anda mungkin menghabiskan berjam-jam hanya untuk mengetahui bahawa pendekatan yang paling jelas adalah yang terbaik selama ini.
Oleh itu, adalah bijak untuk menetapkan had pada analisis tapak awal anda. Jika anda tidak melihat laluan yang lebih baik dalam masa yang diperuntukkan, kembali kepada pendekatan yang lebih mudah. Apabila anda memperoleh lebih banyak pengalaman, anda akan lebih kerap dapat memberitahu lebih awal, berdasarkan teknologi yang digunakan di tapak, sama ada berbaloi untuk mendedikasikan lebih banyak masa untuk menganalisis atau tidak.
Selain itu, dalam projek yang anda perlu mengekstrak data dari tapak hanya sekali, analisis tapak yang teliti kadangkala boleh menghapuskan keperluan untuk menulis kod pengikis sama sekali. Berikut ialah contoh tapak sedemikian - https://ricebyrice.com/nl/pages/find-store.
Dengan menganalisisnya, anda akan mendapati dengan mudah bahawa semua data boleh diperolehi dengan satu permintaan. Anda hanya perlu menyalin data ini daripada penyemak imbas anda ke dalam fail JSON dan tugas anda selesai.
Apabila menganalisis tapak, tukar isihan, halaman, berinteraksi dengan pelbagai elemen tapak, sambil menonton tab Rangkaian dalam Alat Pembangun penyemak imbas anda. Ini akan membolehkan anda memahami dengan lebih baik cara tapak berinteraksi dengan bahagian belakang, rangka kerja yang dibina dan tingkah laku yang boleh diharapkan daripadanya.
Ini jelas, tetapi penting untuk diingat semasa membuat projek. Jika anda melihat beberapa data atau parameter permintaan, ini bermakna ia diperoleh di suatu tempat lebih awal, mungkin dalam permintaan lain, mungkin ia mungkin telah berada di halaman tapak web, mungkin ia dibentuk menggunakan JS daripada parameter lain. Tetapi mereka sentiasa berada di suatu tempat.
Jika anda tidak faham dari mana data pada halaman itu berasal atau data yang digunakan dalam permintaan, ikut langkah berikut:
Latihan menjadikan sempurna di sini. Apabila anda membiasakan diri dengan teknologi yang berbeza, pelbagai rangka kerja dan gelagat yang dijangkakannya, dan apabila anda menghadapi pelbagai jenis teknologi, anda akan mendapati lebih mudah untuk memahami cara sesuatu berfungsi dan cara data dipindahkan. Pengetahuan terkumpul ini akan meningkatkan keupayaan anda dengan ketara untuk mengesan dan memahami aliran data dalam aplikasi web.
Anda mungkin perasan bahawa apabila membuka halaman yang sama beberapa kali, permintaan yang dihantar ke pelayan berbeza: mungkin sesuatu telah dicache dan telah disimpan pada komputer anda. Oleh itu, adalah disyorkan untuk menganalisis tapak dalam mod inkognito, serta menukar penyemak imbas.
Situasi ini sangat relevan untuk aplikasi mudah alih, yang mungkin menyimpan beberapa data dalam storan pada peranti. Oleh itu, semasa menganalisis aplikasi mudah alih, anda mungkin perlu mengosongkan cache dan storan.
Jika semasa analisis anda mendapati tapak tersebut menggunakan rangka kerja yang belum anda temui sebelum ini, luangkan sedikit masa untuk mengetahui tentangnya dan ciri-cirinya. Contohnya, jika anda mendapati tapak dibina dengan Next.js, memahami cara tapak tersebut mengendalikan penghalaan dan pengambilan data boleh menjadi penting untuk strategi mengikis anda.
Anda boleh mempelajari tentang rangka kerja ini melalui dokumentasi rasmi atau dengan menggunakan LLM seperti ChatGPT atau Claude. Pembantu AI ini sangat baik dalam menerangkan konsep khusus rangka kerja. Berikut ialah contoh cara anda boleh menanyakan LLM tentang Next.js:
I am in the process of optimizing my website using Next.js. Are there any files passed to the browser that describe all internal routing and how links are formed? Restrictions: - Accompany your answers with code samples - Use this message as the main message for all subsequent responses - Reference only those elements that are available on the client side, without access to the project code base
Anda boleh membuat pertanyaan serupa untuk rangka kerja bahagian belakang juga. Sebagai contoh, dengan GraphQL, anda mungkin bertanya tentang medan dan struktur pertanyaan yang tersedia. Cerapan ini boleh membantu anda memahami cara berinteraksi dengan lebih baik dengan API tapak dan data yang berpotensi tersedia.
Untuk kerja yang berkesan dengan LLM, saya mengesyorkan sekurang-kurangnya mempelajari asas kejuruteraan segera.
Pengikisan web berjalan seiring dengan kejuruteraan terbalik. Anda mengkaji interaksi bahagian hadapan dan bahagian belakang, anda mungkin perlu mengkaji kod untuk lebih memahami cara parameter tertentu terbentuk.
Tetapi dalam sesetengah kes, kejuruteraan terbalik mungkin memerlukan lebih banyak pengetahuan, usaha, masa atau mempunyai tahap kerumitan yang tinggi. Pada ketika ini, anda perlu memutuskan sama ada anda perlu mendalaminya atau lebih baik menukar sumber data, atau, sebagai contoh, teknologi. Kemungkinan besar, ini akan menjadi saat anda memutuskan untuk meninggalkan pengikisan web HTTP dan beralih kepada penyemak imbas tanpa kepala.
Prinsip utama kebanyakan perlindungan mengikis web bukanlah untuk membuat pengikisan web menjadi mustahil, tetapi menjadikannya mahal.
Mari kita lihat bagaimana respons terhadap carian di zoopla
Selepas mengenal pasti titik akhir yang anda perlukan untuk mengekstrak data sasaran, pastikan anda mendapat respons yang betul semasa membuat permintaan. Jika anda mendapat respons daripada pelayan selain daripada 200, atau data berbeza daripada yang dijangkakan, maka anda perlu memikirkan sebabnya. Berikut adalah beberapa sebab yang mungkin:
Dan banyak lagi kemungkinan sebab, setiap satunya memerlukan analisis yang berasingan.
Teroka hasil yang anda peroleh apabila menukar parameter permintaan, jika ada. Beberapa parameter mungkin tiada tetapi disokong pada bahagian pelayan. Contohnya, susunan, isihan, per_halaman, had dan lain-lain. Cuba tambahkannya dan lihat jika tingkah laku berubah.
Ini amat relevan untuk tapak yang menggunakan graphql
Mari kita pertimbangkan contoh ini
Jika anda menganalisis tapak, anda akan melihat permintaan yang boleh diterbitkan semula dengan kod berikut, saya telah memformatkannya sedikit untuk meningkatkan kebolehbacaan:
I am in the process of optimizing my website using Next.js. Are there any files passed to the browser that describe all internal routing and how links are formed? Restrictions: - Accompany your answers with code samples - Use this message as the main message for all subsequent responses - Reference only those elements that are available on the client side, without access to the project code base
Kini saya akan mengemas kininya untuk mendapatkan hasil dalam 2 bahasa sekaligus, dan yang paling penting, bersama-sama dengan teks dalaman penerbitan:
import requests url = "https://restoran.ua/graphql" data = { "operationName": "Posts_PostsForView", "variables": {"sort": {"sortBy": ["startAt_DESC"]}}, "query": """query Posts_PostsForView( $where: PostForViewWhereInput, $sort: PostForViewSortInput, $pagination: PaginationInput, $search: String, $token: String, $coordinates_slice: SliceInput) { PostsForView( where: $where sort: $sort pagination: $pagination search: $search token: $token ) { id title: ukTitle summary: ukSummary slug startAt endAt newsFeed events journal toProfessionals photoHeader { address: mobile __typename } coordinates(slice: $coordinates_slice) { lng lat __typename } __typename } }""" } response = requests.post(url, json=data) print(response.json())
Seperti yang anda lihat, kemas kini kecil parameter permintaan membolehkan saya tidak bimbang tentang melawati halaman dalaman setiap penerbitan. Anda tidak tahu berapa kali helah ini telah menyelamatkan saya.
Jika anda melihat graphql di hadapan anda dan tidak tahu di mana hendak bermula, maka nasihat saya tentang dokumentasi dan LLM juga berfungsi di sini.
Saya tahu betapa mudahnya untuk menguasai beberapa alatan dan hanya menggunakannya kerana ia berfungsi. Saya sendiri telah jatuh ke dalam perangkap ini lebih daripada sekali.
Tetapi tapak moden menggunakan teknologi moden yang mempunyai kesan ketara pada pengikisan web, dan sebagai tindak balas, alat baharu untuk mengikis web muncul. Mempelajari perkara ini boleh memudahkan projek anda yang seterusnya, malah mungkin menyelesaikan beberapa masalah yang tidak dapat diatasi untuk anda. Saya menulis tentang beberapa alatan sebelum ini.
Saya mengesyorkan terutamanya memberi perhatian kepada curl_cffi dan rangka kerja
botasaurus dan Crawlee untuk Python.
Secara peribadi, baru-baru ini saya menyedari kepentingan perkara ini. Semua alatan yang saya gunakan untuk kerja saya adalah sama ada pembangunan sumber terbuka atau berdasarkan sumber terbuka. Pengikisan web benar-benar hidup terima kasih kepada sumber terbuka, dan ini amat ketara jika anda seorang pembangun Python dan telah menyedari bahawa pada Python tulen semuanya agak menyedihkan apabila anda perlu berurusan dengan cap jari TLS, dan sekali lagi, sumber terbuka menyelamatkan kami di sini.
Dan nampaknya saya paling kurang yang boleh kita lakukan ialah melaburkan sedikit pengetahuan dan kemahiran kita dalam menyokong sumber terbuka.
Saya memilih untuk menyokong Crawlee untuk Python, dan tidak, bukan kerana mereka membenarkan saya menulis dalam blog mereka, tetapi kerana ia menunjukkan dinamik pembangunan yang sangat baik dan bertujuan untuk menjadikan kehidupan lebih mudah bagi pembangun perangkak web. Ia membolehkan pembangunan perangkak yang lebih pantas dengan menjaga dan bersembunyi di bawah tudung aspek kritikal seperti pengurusan sesi, penggiliran sesi apabila disekat, menguruskan penyelarasan tugas tak segerak (jika anda menulis kod tak segerak, anda tahu betapa sakitnya perkara ini), dan banyak lagi.
:::petua
Jika anda menyukai blog setakat ini, sila pertimbangkan untuk memberi Crawlee bintang di GitHub, ini membantu kami menjangkau dan membantu lebih ramai pembangun.
:::
Dan apakah pilihan yang akan anda buat?
Saya rasa beberapa perkara dalam artikel itu jelas kepada anda, beberapa perkara yang anda ikuti sendiri, tetapi saya harap anda juga belajar sesuatu yang baharu. Jika kebanyakannya adalah baharu, cuba gunakan peraturan ini sebagai senarai semak dalam projek anda yang seterusnya.
Saya berbesar hati untuk membincangkan artikel itu. Jangan ragu untuk mengulas di sini, dalam artikel atau hubungi saya dalam komuniti pembangun Crawlee di Discord.
Anda juga boleh mencari saya di platform berikut: Github, Linkedin, Apify, Upwork, Contra.
Terima kasih atas perhatian anda :)
Atas ialah kandungan terperinci petua tentang cara berfikir seperti pakar mengikis web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!