Как передать адрес сайта в SpiderClass из другого скрипта python - PullRequest
0 голосов
/ 19 апреля 2020

Мне нужно передать URL-адрес входа из одного класса в класс Spider и выполнить очистку веб-страниц.

import quotes as q
import scrapy
from scrapy.crawler import CrawlerProcess
class ValidateURL:

    def checkURL(self,urls):
        try:    
            if(urls):
                for key, value in urls.items():
                    if value['login_details']:
                        self.runScrap(value)                                      

        except:
            return False

    def runScrap(self,data):       
            if data:
               process = CrawlerProcess()
# here I'm passing a URL (mail.google.com)
               process.crawl(q.QuotesSpider, passed_url=data['url'])
               process.start()


# -*- coding: utf-8 -*-
from scrapy import Spider
from scrapy.http import FormRequest
from scrapy.utils.response import open_in_browser
import sys
import logging
from bs4 import BeautifulSoup
# import scrapy
# from scrapy.crawler import CrawlerProcess

logging.basicConfig(filename='app.log',level=logging.INFO)

class QuotesSpider(Spider):
    name = 'quotes'
    # I need to update this with passed variable
    start_urls = ('https://quotes.toscrape.com/login',)





    def parse(self, response):
        pass



    def scrape_pages(self, response):
      pass

Мой код не требует пояснений и ему необходимо обновить переменную суперкласса с помощью переданного значения. параметр. как я могу это реализовать? Я пытался использовать self.passed_url, но он доступен только внутри функции и не получает обновления.

1 Ответ

1 голос
/ 19 апреля 2020

Вам необходимо сопоставить имя переданного аргумента с атрибутом паука start_urls.

Согласно документам , если вы не переопределите метод __init__ для паука все переданные аргументы в класс паука отображаются на атрибуты паука. Таким образом, чтобы переопределить атрибут start_urls, вам необходимо отправить имя аргумента extact.

Примерно так:

    def runScrap(self,data):       
        if data:
            process = CrawlerProcess()
            process.crawl(q.QuotesSpider, start_urls=[data['url']])
            process.start()

Надеюсь, это поможет.

...