petua tentang cara berfikir seperti pakar mengikis web

DDD
Lepaskan: 2024-11-05 11:29:02
asal
692 orang telah melayarinya

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.

Crawlee & Apify

Ini ialah komuniti pembangun rasmi Apify dan Crawlee. | 8987 ahli

tips on how to think like a web scraping expert perselisihan.com

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.

1. Memilih sumber data untuk projek

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:

  • API Rasmi - tapak mungkin menyediakan API rasmi percuma yang melaluinya anda boleh mendapatkan semua data yang diperlukan. Ini adalah pilihan terbaik untuk anda. Sebagai contoh, anda boleh mempertimbangkan pendekatan ini jika anda perlu mengekstrak data daripada Yelp
  • Laman web - dalam kes ini, kami mengkaji tapak web, strukturnya, serta cara bahagian hadapan dan bahagian belakang berinteraksi
  • Aplikasi Mudah Alih - dalam sesetengah kes, tiada tapak web atau API langsung, atau aplikasi mudah alih menyediakan lebih banyak data, dalam hal ini, jangan lupa tentang pendekatan lelaki di tengah

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.

2. Semak robots.txt dan peta laman

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:

  • robot adalah nama yang telah ditetapkan untuk crawler dalam SEO. Biasanya, ini merujuk kepada perangkak enjin carian utama seperti Google dan Bing, atau perkhidmatan seperti Ahrefs dan ChatGPT.
  • robots.txt ialah fail yang menerangkan tingkah laku yang dibenarkan untuk robot. Ia termasuk ejen pengguna perangkak yang dibenarkan, masa menunggu antara imbasan halaman, corak halaman yang dilarang untuk diimbas dan banyak lagi. Peraturan ini biasanya berdasarkan halaman mana yang harus diindeks oleh enjin carian dan mana yang tidak.
  • peta laman menerangkan struktur tapak untuk memudahkan robot menavigasi. Ia juga membantu dalam mengimbas hanya kandungan yang perlu dikemas kini, tanpa membuat beban yang tidak perlu di tapak

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.

3. Jangan abaikan analisis tapak

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.

tips on how to think like a web scraping expert

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.

tips on how to think like a web scraping expert

4. Interaktiviti maksimum

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.

5. Data tidak muncul secara tiba-tiba

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:

  1. Secara berurutan, semak semua permintaan tapak yang dibuat sebelum titik ini.
  2. Periksa respons, pengepala dan kuki mereka.
  3. Gunakan gerak hati anda: Bolehkah parameter ini menjadi cap masa? Bolehkah ia parameter lain dalam bentuk yang diubah suai?
  4. Adakah ia menyerupai mana-mana cincang atau pengekodan standard?

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.

6. Data dicache

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.

7. Ketahui lebih lanjut tentang rangka kerja

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

Salin selepas log masuk
Salin selepas log masuk

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.

8. Kejuruteraan songsang

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

tips on how to think like a web scraping expert

9. Menguji permintaan kepada titik akhir

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:

  • Anda perlu lulus beberapa parameter, contohnya kuki atau pengepala teknikal tertentu
  • Tapak ini memerlukan apabila mengakses titik akhir ini, terdapat pengepala Perujuk yang sepadan
  • Tapak ini menjangkakan bahawa pengepala akan mengikut susunan tertentu. Saya pernah mengalami ini hanya beberapa kali, tetapi saya pernah mengalaminya
  • Tapak ini menggunakan perlindungan terhadap pengikisan web, contohnya dengan cap jari TLS

Dan banyak lagi kemungkinan sebab, setiap satunya memerlukan analisis yang berasingan.

10. Eksperimen dengan parameter permintaan

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

Salin selepas log masuk
Salin selepas log masuk

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())
Salin selepas log masuk

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.

11. Jangan takut dengan teknologi baru

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.

12. Bantu perpustakaan sumber terbuka

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?

Kesimpulan

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!

sumber:dev.to
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan