Scrap Crawlspider правила - PullRequest
       10

Scrap Crawlspider правила

0 голосов
/ 11 июля 2019

Базовый паук работает. Затем я преобразовал его в CrawlSpider и правила, к сожалению, теперь паук больше не работает.

Базовый паук тестируется на странице сведений о продукте: https://www.ah.nl/producten/product/wi395939/ah-kleintje-boerenkool Затем он получает предметы, как указано.

Меня интересует использование CrawlSpider для прохождения всех бонусных статей https://www.ah.nl/bonus Зайдите на страницу с описанием товара и получите указанную информацию.

  1. Как я могу исправить свой код, чтобы паук снова заработал?

  2. Может кто-нибудь объяснить, что я делаю не так с правилами

  3. Я хотел бы также исключить response.xpath ("// div [содержит (@ класс, 'product-sidebar__products')]") Если этот «anderen kochten ook» (на английском языке: «другие клиенты оба эти продукта») присутствует на странице сведений о продукте https://www.ah.nl/producten/product/wi160917/ah-verse-pesto-groen здесь это присутствует https://www.ah.nl/producten/product/wi220252/swiffer-vloerreiniger-navul-stofdoekjes здесь его нет

Я много чего пробовал, но не могу разобраться с правилами

class ahSpider(CrawlSpider):

    name = 'ah'
    allowed_domains = ['ah.nl']  # geen url neer zetten alleen domain name
    start_urls = ['https://www.ah.nl']

    # "anderen kochten ook" "in English: “other customers both these products"
    # response.xpath("//div[contains(@class,'product-sidebar__products')]")

    rules = [
            Rule(LinkExtractor(allow=('/bonus'), deny=('/allerhandebox/', '/allerhande/', '/winkels/', '/acties/', '/klantenservice/', '/zakelijk/', '/bezorgbundel/', '/vakslager/')), follow=True),
        Rule(LinkExtractor(allow=('/producten/product/[0-9]+/[0-9]+'),), callback='parse_items'),
    ]

    #def parse(self, response):
    def parse_items(self, response):
        items = AhItem()

        product_name = response.xpath("//span[contains(@class, 'line-clamp--active')]//text()").extract_first()

        items['product_name']           = product_name
        yield items

Ответы [ 2 ]

1 голос
/ 11 июля 2019
  1. Основная проблема, кажется, исходит от выражения '[0-9] + / [0-9] +'. Ссылки на странице содержат подробные ссылки на товары в стиле 'https://www.ah.nl/producten/product/wi460830/edet-ultra-soft-tp-magnolia-4-laags',' https://www.ah.nl/producten/product/wi210145/heineken-premium-pilsener'. Если вы измените свое выражение на allow=('/producten/product/'), эти ссылки на подробности продукта больше не будут отфильтрованы.
  2. Объясняется под 1
  3. Вы можете включить что-то вроде следующего в метод parse_items:
from scrapy.exceptions import DropItem
others = response.xpath('//div[contains(@class,"product-sidebar__products")]')
if others:
  raise DropItem("'others also bought' present on the product_detail page") 
0 голосов
/ 11 июля 2019

Спасибо за вашу реакцию.Я не получаю никаких ошибок просто пустой файл.Надеюсь, вы можете дать отзыв о коде?

Спасибо за руку!Rob

...