Как сделать Scrapy XmlFeed Spider быстрее - PullRequest
0 голосов
/ 30 января 2019

XML-фид, который я собираю, содержит около тысячи элементов.Мне интересно, есть ли способ разделить нагрузку или другой способ значительно сократить время выполнения.В настоящее время требуется две минуты, чтобы перебрать все xml по ссылке ниже.Любые предложения или советы с благодарностью.

Пример: https://www.cityblueshop.com/sitemap_products_1.xml

from scrapy.spiders import XMLFeedSpider
from learning.items import TestItem
class MySpider(XMLFeedSpider):
    name = 'testing'
    allowed_domains = ['www.cityblueshop.com']
    start_urls = ['https://www.cityblueshop.com/sitemap_products_1.xml'] 

    namespaces = [('n', 'http://www.sitemaps.org/schemas/sitemap/0.9')]
    itertag = 'n:url'
    iterator = 'xml'


    def parse_node(self, response, node):

        item = TestItem()
        item['url'] = node.xpath('.//n:loc/text()').extract()


        return item

Две минуты выполнения для всех элементов.Есть ли способы сделать это быстрее, используя Scrapy?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Я локально протестировал следующего паука:

from scrapy.spiders import XMLFeedSpider

class MySpider(XMLFeedSpider):
    name = 'testing'
    allowed_domains = ['www.cityblueshop.com']
    start_urls = ['https://www.cityblueshop.com/sitemap_products_1.xml']

    namespaces = [('n', 'http://www.sitemaps.org/schemas/sitemap/0.9')]
    itertag = 'n:url'
    iterator = 'xml'


    def parse_node(self, response, node):
        yield {'url': node.xpath('.//n:loc/text()').get()}

Для запуска требуется менее 3 секунд, включая запуск ядра Scrapy и все.

Пожалуйста, убедитесь, что время не потраченогде-то еще, например, в модуле learning, из которого вы импортируете свой подкласс элемента.

0 голосов
/ 30 января 2019

Попробуйте увеличить CONCURRENT_REQUESTS, CONCURRENT_REQUESTS_PER_DOMAIN, CONCURRENT_REQUESTS_PER_IP, например: https://doc.scrapy.org/en/latest/topics/settings.html#concurrent-requests-per-domain Но помните, что, помимо высокой скорости, это может привести к снижению показателя успеха, например, для многих 429 ответов, запретов и т. Д.

...