Bagaimana Membangun Crawler Web Asas untuk Menarik Maklumat Dari Laman Web

Bagaimana Membangun Crawler Web Asas untuk Menarik Maklumat Dari Laman Web

Program yang membaca maklumat dari laman web, atau perayap web, mempunyai semua jenis aplikasi yang berguna. Anda boleh mendapatkan maklumat stok, skor sukan, teks dari akaun Twitter, atau menarik harga dari laman web membeli-belah.





Menulis program merangkak web ini lebih mudah daripada yang anda fikirkan. Python mempunyai perpustakaan yang bagus untuk menulis skrip yang mengekstrak maklumat dari laman web. Mari lihat bagaimana membuat crawler web menggunakan Scrapy.





Memasang Scrapy

Mengikis adalah perpustakaan Python yang dibuat untuk mengikis web dan membina perayap web. Ini cepat, sederhana, dan dapat menavigasi melalui beberapa halaman web tanpa banyak usaha.





Scrapy boleh didapati melalui perpustakaan Pip Installs Python (PIP), berikut adalah penyegaran cara memasang PIP pada Windows, Mac, dan Linux .

Menggunakan Persekitaran Maya Python lebih disukai kerana ia akan membolehkan anda memasang Scrapy dalam direktori maya yang membiarkan fail sistem anda sendiri. Dokumentasi Scrapy mengesyorkan melakukan ini untuk mendapatkan hasil terbaik.



Buat direktori dan mulakan persekitaran maya.

menukar tablet windows 10 ke android
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Anda kini boleh memasang Scrapy ke dalam direktori tersebut menggunakan perintah PIP.





pip install scrapy

Pemeriksaan pantas untuk memastikan Scrapy dipasang dengan betul

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Bagaimana Membina Web Crawler

Setelah persekitaran siap, anda boleh mula membina perayap web. Mari kita mengikis beberapa maklumat dari halaman Wikipedia mengenai bateri: https://en.wikipedia.org/wiki/Battery_(elektrik) .





Langkah pertama untuk menulis crawler adalah menentukan kelas Python yang merangkumi Scrapy.Spider . Ini memberi anda akses ke semua fungsi dan ciri dalam Scrapy. Mari panggil kelas ini labah-labah1 .

Kelas labah-labah memerlukan beberapa maklumat:

  • ke nama kerana mengenal pasti labah-labah
  • ke start_urls pemboleh ubah yang mengandungi senarai URL untuk merangkak dari (URL Wikipedia akan menjadi contoh dalam tutorial ini)
  • ke menghuraikan () kaedah yang digunakan untuk memproses laman web untuk mengekstrak maklumat
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Ujian pantas untuk memastikan semuanya berjalan dengan baik.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Mematikan Pembalakan

Menjalankan Scrapy dengan kelas ini mencetak maklumat log yang tidak akan membantu anda sekarang. Mari permudahkan dengan membuang lebih banyak maklumat log ini. Gunakan a amaran penyataan dengan menambahkan kod pada awal fail.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Sekarang apabila anda menjalankan skrip sekali lagi, maklumat log tidak akan dicetak.

Menggunakan Pemeriksa Chrome

Semua yang ada di laman web disimpan dalam elemen HTML. Elemen disusun dalam Model Objek Dokumen (DOM). Memahami DOM sangat penting untuk memanfaatkan sepenuhnya perayap web anda. Perayap web mencari semua elemen HTML di halaman untuk mencari maklumat, jadi penting untuk mengetahui bagaimana penyusunnya.

Google Chrome mempunyai alat yang membantu anda mencari elemen HTML dengan lebih pantas. Anda boleh mencari HTML untuk elemen yang anda lihat di laman web menggunakan pemeriksa.

  • Navigasi ke halaman di Chrome
  • Letakkan tetikus pada elemen yang ingin anda lihat
  • Klik kanan dan pilih Periksa dari menu

Langkah-langkah ini akan membuka konsol pembangun dengan Unsur tab dipilih. Di bahagian bawah konsol, anda akan melihat sebatang pokok unsur. Pokok ini adalah bagaimana anda akan mendapat maklumat untuk skrip anda.

Mengambil Tajuk

Mari dapatkan skrip untuk membuat kerja untuk kita; Penjelajahan mudah untuk mendapatkan teks tajuk halaman web.

Mulakan skrip dengan menambahkan beberapa kod ke menghuraikan () kaedah yang mengekstrak tajuk.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

The tindak balas hujah menyokong kaedah yang disebut CSS () yang memilih elemen dari halaman menggunakan lokasi yang anda berikan.

Dalam contoh ini, elemennya adalah h1.Kepalaan Pertama . Menambah

::text

ke skrip adalah apa yang memberi anda kandungan teks elemen. Akhirnya, ekstrak () kaedah mengembalikan elemen yang dipilih.

Menjalankan skrip ini dalam Scrapy mencetak tajuk dalam bentuk teks.

[u'Battery (electricity)']

Mencari Penerangan

Sekarang setelah kita mengikis teks tajuk, mari buat lebih banyak lagi dengan skrip. Crawler akan mencari perenggan pertama selepas tajuk dan mengekstrak maklumat ini.

Inilah pokok elemen di Konsol Pembangun Chrome:

cara menggodam kamera komputer riba dari jauh
div#mw-content-text>div>p

Anak panah kanan (>) menunjukkan hubungan ibu bapa-anak antara elemen.

Lokasi ini akan mengembalikan semua hlm elemen yang dipadankan, yang merangkumi keseluruhan keterangan. Untuk mendapatkan yang pertama hlm elemen anda boleh menulis kod ini:

response.css('div#mw-content-text>div>p')[0]

Sama seperti tajuk, anda menambah pengekstrak CSS

::text

untuk mendapatkan kandungan teks elemen.

response.css('div#mw-content-text>div>p')[0].css('::text')

Ungkapan akhir menggunakan ekstrak () untuk mengembalikan senarai. Anda boleh menggunakan Python sertai () berfungsi untuk menyertai senarai setelah semua merangkak selesai.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Hasilnya adalah perenggan pertama teks!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Mengumpulkan Data JSON

Scrapy dapat mengekstrak maklumat dalam bentuk teks, yang berguna. Scrapy juga membolehkan anda melihat data Notasi Objek JavaScript (JSON). JSON adalah cara yang kemas untuk menyusun maklumat dan digunakan secara meluas dalam pembangunan web. JSON berfungsi dengan baik dengan Python juga.

Apabila anda perlu mengumpulkan data sebagai JSON, anda boleh menggunakan hasil penyataan yang dibina dalam Scrapy.

Berikut adalah versi skrip baru menggunakan pernyataan hasil. Daripada mendapatkan elemen p pertama dalam format teks, ini akan merebut semua elemen p dan menyusunnya dalam format JSON.

peranti ini tidak dapat dimulakan. (kod 10) peranti yang tidak ada telah ditentukan
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Anda kini boleh menjalankan labah-labah dengan menentukan fail JSON keluaran:

scrapy runspider spider3.py -o joe.json

Skrip sekarang akan mencetak semua elemen p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Mengikis Pelbagai Unsur

Sejauh ini perayap web telah mengikis tajuk dan satu jenis elemen dari halaman. Scrapy juga dapat mengekstrak maklumat dari pelbagai jenis elemen dalam satu skrip.

Mari kita ekstrak hits Box Office IMDb teratas untuk hujung minggu. Maklumat ini diambil dari http://www.imdb.com/chart/boxoffice , dalam jadual dengan baris untuk setiap metrik.

The menghuraikan () kaedah boleh mengekstrak lebih daripada satu medan dari baris. Dengan menggunakan Alat Pembangun Chrome, anda dapat menemui unsur-unsur yang bersarang di dalam jadual.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

The imej pemilih menentukan bahawa img adalah keturunan dari td.posterColumn . Untuk mengekstrak atribut yang betul, gunakan ungkapan ::attr(src).

Menjalankan labah-labah mengembalikan JSON:

[
{'gross': '.8M', 'weeks': '1', 'weekend': '.8M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTItOGIwYS00NmRkLWJlYjctMWM0ZjFmMDU4ZjEzXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Justice League'},
{'gross': '.5M', 'weeks': '1', 'weekend': '.5M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgtNDkzMC00YWJkLTk1NGEtYWUxNjhmMmQ5ZjYyXkEyXkFqcGdeQXVyMjMxOTE0ODA@._V1_UX45_CR0,0,45,67_AL_.jpg', 'title': 'Wonder'},
{'gross': '7.3M', 'weeks': '3', 'weekend': '.7M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BMjMyNDkzMzI1OF5BMl5BanBnXkFtZTgwODcxODg5MjI@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Thor: Ragnarok'},
...
]

Lebih banyak Pengikis dan Bot Web

Scrapy adalah perpustakaan terperinci yang boleh dilakukan untuk merangkumi jenis perayapan web yang anda minta. Ketika mencari maklumat dalam elemen HTML, digabungkan dengan sokongan Python, sukar untuk dikalahkan. Sama ada anda membina perayap web atau mengetahui asas-asas pengikisan web, satu-satunya had adalah sejauh mana anda bersedia belajar.

Sekiranya anda mencari lebih banyak kaedah untuk membina crawler atau bot, anda boleh mencuba membina bot Twitter dan Instagram menggunakan Python . Python dapat membina beberapa perkara yang luar biasa dalam pembangunan web, jadi lebih baik melayari perayap web ketika meneroka bahasa ini.

Berkongsi Berkongsi Tweet E-mel 15 Perintah Windows Command Prompt (CMD) yang mesti anda ketahui

Perintah arahan masih merupakan alat Windows yang kuat. Berikut adalah arahan CMD yang paling berguna yang perlu diketahui oleh pengguna Windows.

Baca Seterusnya
Topik-topik yang berkaitan
  • Pengaturcaraan
  • Alat Webmaster
  • Pengaturcaraan
  • Python
  • Tutorial Pengekodan
  • Perayap Web
Mengenai Pengarang Geran Anthony(40 Artikel Diterbitkan)

Anthony Grant adalah penulis bebas yang merangkumi Pengaturcaraan dan Perisian. Dia pakar Sains Komputer dalam pengaturcaraan, Excel, perisian dan teknologi.

Lagi Dari Anthony Grant

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan