Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Mengikis Halaman Produk(Etsy, Amazon, Ebay) dalam Python Menggunakan Scrapy dan Minta Panggilan Balik

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

Patricia Arquette
Patricia Arquetteasal
2024-11-06 10:58:02560semak imbas

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}

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()

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)

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}

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)

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!

Kenyataan:
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