как перебирать список аргументов в scrapy spider? - PullRequest
0 голосов
/ 08 мая 2020

Привет, я пытаюсь передать список аргументов в команде scrapy spider. Я могу запустить его для 1 аргумента. но не может сделать это для списка аргументов. Пожалуйста помоги. вот что я пробовал.

# -*- coding: utf-8 -*-
import scrapy
import json


class AirbnbweatherSpider(scrapy.Spider):
    name = 'airbnbweather'
    allowed_domains = ['www.wunderground.com']

    def __init__(self,geocode ):
        self.geocode = geocode.split(',') 
        pass   
       
    def start_requests(self):
        yield scrapy.Request(url="https://api.weather.com/v3/wx/forecast/daily/10day?apiKey=6532d6454b8aa370768e63d6ba5a832e&geocode={0}{1}{2}&units=e&language=en-US&format=json".format(self.geocode[0],"%2C",self.geocode[1]))

    def parse(self, response):
        resuturant = json.loads(response.body)
        
        yield {
            'temperatureMax' : resuturant.get('temperatureMax'),
            'temperatureMin' : resuturant.get('temperatureMin'),
            'validTimeLocal' : resuturant.get('validTimeLocal'),
            
            }

Я могу запустить его с помощью этой команды

scrapy crawl airbnbweather -o BOSTON.json -a geocode="42.361","-71.057"

он работает нормально. но как я могу перебирать список геокодов?

list = [("42.361","-71.057"),("29.384","-94.903"),("30.384", "-84.903")]

1 Ответ

1 голос
/ 08 мая 2020

Вы можете использовать только строку в качестве аргументов паука (https://docs.scrapy.org/en/latest/topics/spiders.html#spider -аргументы ), поэтому вы должны передать список как строку и выполнить синтаксический анализ в своем коде. Следующее, кажется, помогает:

import scrapy
import json
import ast


class AirbnbweatherSpider(scrapy.Spider):
    name = 'airbnbweather'
    allowed_domains = ['www.wunderground.com']

    def __init__(self, geocode, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.geocodes = ast.literal_eval(geocode)

    def start_requests(self):
        for geocode in self.geocodes:
            yield scrapy.Request(
                url="https://api.weather.com/v3/wx/forecast/daily/10day?apiKey=6532d6454b8aa370768e63d6ba5a832e&geocode={0}{1}{2}&units=e&language=en-US&format=json".format(geocode[0],"%2C",geocode[1]))

Затем вы можете запустить краулер следующим образом:

scrapy crawl airbnbweather -o BOSTON.json -a geocodes='[("42.361","-71.057"),("29.384","-94.903"),("30.384", "-84.903")]'
...