Как очистить 2 веб-страницы с одинаковым доменом на scrapy, используя python?

#python #web-scraping #scrapy

#python #очистка веб-страниц #scrapy

Вопрос:

Привет, ребята, я очень новичок в очистке данных, я попробовал базовый. Но моя проблема в том, что у меня есть 2 веб-страницы с одним и тем же доменом, которые мне нужно очистить

Моя логика такова: первая страница www.sample.com/view-all.html * На этой странице открывается весь список элементов, и мне нужно получить все ссылки на каждый элемент.

Вторая страница www.sample.com/productpage.52689.html

* это ссылка, пришедшая с первой страницы, поэтому 52689 необходимо динамически изменять в зависимости от ссылки, предоставленной первой страницей.

Мне нужно получить все данные, такие как заголовок, описание и т.д., На второй странице.

я имею в виду цикл for, но он не работает с моей стороны. Я ищу в Google, но ни у кого нет такой же проблемы, как у меня. пожалуйста, помогите мне

 import scrapy

class SalesItemSpider(scrapy.Spider):
    name = 'sales_item'
    allowed_domains = ['www.sample.com']
    start_urls = ['www.sample.com/view-all.html', 'www.sample.com/productpage.00001.html']

    def parse(self, response):
        for product_item in response.css('li.product-item'):
            item = {
                'URL': product_item.css('a::attr(href)').extract_first(),
            }
            yield item`
  

Комментарии:

1. Scrapy не обязательно использовать yield элемент. Он может yield запросить () с URL и именем функции, которое будет очищено от этого URL. Этот способ parse может очищать URL-адреса с главной страницы и использовать Request() для запуска другой функции для очистки от этих URL-адресов. У вас должно быть все в документации — docs.scrapy.org — Если вы заинтересованы в очистке, вам следует прочитать эту документацию с первой до последней страницы.

Ответ №1:

Внутри parse вы можете yield Request() с помощью URL и имени функции очистить этот URL в другой функции

 def parse(self, response):

    for product_item in response.css('li.product-item'):
        url = product_item.css('a::attr(href)').extract_first() 

        # it will send `www.sample.com/productpage.52689.html` to `parse_subpage` 
        yield scrapy.Request(url=url, callback=self.parse_subpage)


def parse_subpage(self, response):
    # here you parse from www.sample.com/productpage.52689.html 

    item = {
        'title': ..., 
        'description': ...
    }

    yield item
  

Ищите Request в документации Scrapy и ее руководстве


Существует также

 response.follow(url, callback=self.parse_subpage)
  

который автоматически добавит www.sample.com к URL-адресам, поэтому вам не придется делать это самостоятельно в

 Request(url = "www.sample.com/"   url, callback=self.parse_subpage)
  

Смотрите Ярлык для создания запросов


Если вы заинтересованы в очистке, вам следует прочитатьdocs.scrapy.org от первой страницы до последней.

Комментарии:

1. Спасибо @furas, все работает, я прочитал документацию и понимаю функции. Я немного изменил предоставленный вами код, и теперь он работает нормально, спасибо