Как сканировать внутренние ссылки через JavaScript? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь сканировать все внутренние ссылки сайта, но сталкиваюсь с некоторыми проблемами, получая ссылки для сканирования с помощью scrapy, так как похоже, что они генерируются с помощью javascript.Например, одна страница этого сайта находится здесь https://www.vecteezy.com/vector-art/274468-wavy-lines-pastel-background

Я попытался запустить приведенный ниже код, и мне не повезло получить ссылки / теги в разделе "Это изображение появляется в поисках" на странице

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Rule, CrawlSpider
from datablogger_scraper.items import DatabloggerScraperItem


class DatabloggerSpider(CrawlSpider):

name = "vecteezycrawl"


allowed_domains = ["www.vecteezy.com"]


start_urls = ["https://www.vecteezy.com"]


rules = [
    Rule(
        LinkExtractor(
            canonicalize=True,
            unique=True
        ),
        follow=True,
        callback="parse_items"
    )
]

def start_requests(self):
    for url in self.start_urls:
        yield scrapy.Request(url, callback=self.parse, 
dont_filter=True)


def parse_items(self, response):

    items = []
   links = LinkExtractor(canonicalize=True, 
unique=True).extract_links(response)


        is_allowed = False
        for allowed_domain in self.allowed_domains:
            if allowed_domain in link.url:
                is_allowed = True

        if is_allowed:
            item = DatabloggerScraperItem()
            item['url_from'] = response.url
            item['url_to'] = link.url
            items.append(item)

    return items

Ссылки, которые я пытаюсь получить, могут быть связаны с тегами, которые вы видите под этим изображением, при поиске: пастельный фон, пастель, фон, абстрактный, волнистый, линия, диагональ,seamless..etc

Похоже, после некоторых обновлений я смог заставить его сканировать больше, но теперь он не будет сканировать весь сайт?Вот дамп после завершения сканирования

ИНФОРМАЦИЯ: Статистика Dumping Scrapy:

{'downloader/exception_count': 10746,
 'downloader/exception_type_count/scrapy.exceptions.IgnoreRequest': 10742,
 'downloader/exception_type_count/twisted.web._newclient.ResponseNeverReceived': 4,
 'downloader/request_bytes': 7457136941,
 'downloader/request_count': 233585,
 'downloader/request_method_count/GET': 233585,
 'downloader/response_bytes': 929365695,
 'downloader/response_count': 233581,
 'downloader/response_status_count/200': 23618,
 'downloader/response_status_count/301': 23,
 'downloader/response_status_count/302': 6,
 'downloader/response_status_count/400': 183088,
 'downloader/response_status_count/500': 26806,
 'downloader/response_status_count/504': 40,
 'dupefilter/filtered': 1797531,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2019, 2, 7, 21, 11, 10, 143192),
 'httperror/response_ignored_count': 184160,
 'httperror/response_ignored_status_count/400': 183088,
 'httperror/response_ignored_status_count/500': 1072,
 'item_scraped_count': 2066100,
 'log_count/DEBUG': 2311531,
 'log_count/INFO': 184277,
 'offsite/domains': 30,
 'offsite/filtered': 505814,
 'request_depth_max': 211,
 'response_received_count': 207778,
 'retry/count': 25778,
 'retry/max_reached': 1072,
 'retry/reason_count/500 Internal Server Error': 25734,
 'retry/reason_count/504 Gateway Time-out': 40,
 'retry/reason_count/twisted.web._newclient.ResponseNeverReceived': 4,
 'scheduler/dequeued': 244326,
 'scheduler/dequeued/memory': 244326,
 'scheduler/enqueued': 244326,
 'scheduler/enqueued/memory': 244326,
 'start_time': datetime.datetime(2019, 2, 7, 19, 21, 28, 203714)}
...