как передать аргумент в паука-скрапа и инициировать его из питона - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь передать переменную screen_name моему пауку, потому что это имя экрана будет меняться каждый раз. (конечная цель - запустить несколько пауков с разными именами экранов)

Я инициализирую, как это

process.crawl(TwitterSpider(screen_name="realDonaldTrump"))

Однако я получаю следующую ошибку.

spider = cls (* args, ** kwargs) Ошибка типа: init () отсутствует 1 обязательный позиционный аргумент: 'screen_name'

import scrapy
from scrapy.crawler import CrawlerProcess

class TwitterSpider(scrapy.Spider):
    name = "twitter_friends"


    def __init__(self, screen_name, *args, **kwargs):
        self.usernames = []
        self.screen_name = screen_name
        super().__init__(**kwargs)  


    def start_requests(self):

        base_url = "https://mobile.twitter.com"
        urls = [
            base_url + '/{screen_name}/following'.format(screen_name=self.screen_name,
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def closed(self, spider):
        print("spider closed")

    def parse(self, response):
        pass


process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})


process.crawl(TwitterSpider(screen_name="realDonaldTrump"))
process.start() # the script will block here until the crawling is finished

Это не вопрос о том, как запустить его из строки cmd, а только из питона

1 Ответ

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

Вы можете передать класс паука и его аргументы методу crawl.Например:

process.crawl(TwitterSpider, screen_name="realDonaldTrump")
process.start() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...