Класс Scrapy Crawl пропускает ссылки и не возвращает ответное тело - PullRequest
0 голосов
/ 08 мая 2019

Сейчас я пытаюсь почистить эту страницу: http://search.siemens.com/en/?q=iot

Для этого мне нужно извлечь ссылки и разобрать их, которые я только что узнал, должно быть возможно с классом Crawl. Однако моя реализация, похоже, не работает. В целях тестирования я пытаюсь вернуть тело ответа с каждого веб-сайта. К сожалению, паук открывает только каждую третью ссылку и не возвращает ответное тело.

Есть идеи, что я делаю не так?

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class SiemensCrawlSSpider(CrawlSpider):
    name = 'siemens_crawl_s'
    allowed_domains = ['search.siemens.com/en/?q=iot']
    start_urls = ['http://search.siemens.com/en/?q=iot']

    rules = (
        Rule(LinkExtractor(restrict_xpaths='.//dl[@id="search-resultlist"]/dt/a'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        yield response.body

1 Ответ

1 голос
/ 10 мая 2019

Настройка LOG_LEVEL = 'DEBUG' на settings.py вы можете увидеть, как некоторые запросы фильтруются из-за параметра allowed_domains

2019-05-10 00:38:27 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'www.siemens.com': <GET https://www.siemens.com/global/en/home/products/software/mindsphere-iot.html>
2019-05-10 00:38:27 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'www.industry.siemens.com.cn': <GET https://www.industry.siemens.com.cn/automation/cn/zh/pc-based-automation/industrial-iot/iok2k/Pages/iot.aspx>
2019-05-10 00:38:27 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'w3.siemens.com': <GET https://w3.siemens.com/mcms/pc-based-automation/en/industrial-iot>
2019-05-10 00:38:27 [scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to 'new.siemens.com': <GET https://new.siemens.com/global/en/products/services/iot-siemens.html>

Вы можете попробовать с allowed_domains = ['siemens.com', 'siemens.com.cn']

или вообще не устанавливать allowed_domains

https://docs.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider.allowed_domains

...