Cara Mengikis Halaman Produk(Etsy, Amazon, Ebay) dalam Python Menggunakan Scrapy dan Minta Panggilan Balik

Patricia Arquette
Lepaskan: 2024-11-06 10:58:02
asal
624 orang telah melayarinya

How to Scrape Product Pages(Etsy, Amazon, Ebay) in Python Using Scrapy and Request Callbacks

(Saya tidak membenarkan apa-apa yang menyalahi undang-undang, ini adalah untuk tujuan pendidikan sahaja)

pengenalan

Scrapy ialah salah satu rangka kerja mengikis web terbaik dalam Python, ia mudah digunakan, pantas dan penuh dengan ciri.

Tetapi bagaimana jika anda mahu mengikis berbilang halaman secara rekursif? Seperti halaman produk.

Nah cara paling mudah ialah dengan menambahkan panggilan balik ringkas pada fungsi Permintaan.

Berikut ialah coretan kod dalam projek Scrapy yang merangkak tapak web dengan produk tersenarai seperti Amazon, eBay dan Etsy:

def parse(self, response):
    links = response.css('a.s-item__link::attr(href)').getall()

    for link in links:
        yield Request(url=link, callback=self.parse_item)

    next_page = response.css('a.pagination___next.icon-link::attr(href)').get()
    if next_page:
        print('Next page: %s' % next_page)
        yield Request(url=next_page, callback=self.parse)

def parse_item(self, response):
    title = response.xpath('//h1[@class="x-item-title___mainTitle"]/span/text()').get()
    price = response.xpath('//span[@id="prcIsum"]/text()').get()

    yield {'title':title,
           'price':price}
Salin selepas log masuk

Bagaimana ia berfungsi?

Pertama, ia mengambil pautan setiap item yang disenaraikan pada halaman produk menggunakan baris kod ini:

links = response.css('a.s-item__link::attr(href)').getall()
Salin selepas log masuk

Ia kemudian menggelung melalui setiap satu pautan tersebut, menghantar permintaan untuk mendapatkan sumber halaman dan melakukan panggilan balik ke parse_item:

for link in links:
     yield Request(url=link,callback=self.parse_item)
Salin selepas log masuk

Di dalam fungsi parse_item, ia merebut tajuk dan harga item:

def parse_item(self, response):
      title = response.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()').get()
      price = response.xpath('//span[@id="prcIsum"]/text()').get()

      yield {'title':title,
             'price':price}
Salin selepas log masuk

Kod kami kemudian mengambil pautan ke halaman seterusnya, memintanya dengan panggilan balik kepada dirinya sendiri (iaitu fungsi parse) dan bermula sekali lagi:

next_page = response.css('a.pagination__next.icon-link::attr(href)').get()
  if next_page:
        print('Next page:%s' % next_page)
        yield Request(url=next_page,callback=self.parse)
Salin selepas log masuk

Kesimpulan

Begitulah, semudah itu!

Mengikis halaman produk secara rekursif dengan Scrapy boleh dilaksanakan semudah menambah panggilan balik pada fungsi Permintaan.

Atas ialah kandungan terperinci Cara Mengikis Halaman Produk(Etsy, Amazon, Ebay) dalam Python Menggunakan Scrapy dan Minta Panggilan Balik. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan