Scrapy - новый запрос не работает в цикле - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу удалить список сообщений в Facebook. Для этого я делаю логин, а затем загружаю список идентификаторов постов, чтобы запросы регистрировались только один раз. Однако, когда я пытаюсь использовать yield для выполнения запросов, он не входит в цикл for.

Просто для тестирования я изменяю выход для возврата, и он входит в цикл for и вызывает метод parse.

``` lang-py
class FacebookSpider(scrapy.Spider):
  name = "test"
  start_urls = ['https://mbasic.facebook.com']

  def parse(self, response):
  return FormRequest.from_response( response, callback=self.parse_home,
    formxpath='//form[contains(@action, "login")]',
    formdata={'email': "email@email.com", 'pass': "password"}, )

  def parse_home(self, response):
    print(">> parse_home")
    if response.xpath("//div/input[@value='Ok' and @type='submit']"):
      print(">> if condition")
      return FormRequest.from_response(response, formdata={'name_action_selected': 'dont_save'}, callback=self.parse_home, dont_filter=True,)

    for post in [1,2]:
      print(">> for loop")
      href = response.urljoin("/335653391129/posts/10157014203171130".format(post))
      yield scrapy.Request(url=href, callback=self.parse_page, dont_filter=True,)

  def parse_page(self, response):
    print("____ parse_page  _________")
```

Используя выход, получилось:

>> parse_home
>> if condition

Только изменение доходности для возврата было:

>> parse_home
>> if condition
>> parse_home
>> for loop
____ parse_page  _________

Я не понимаю, что происходит. Заранее спасибо,

1 Ответ

1 голос
/ 24 апреля 2019

Ваш метод parse_home является генератором, вы не должны использовать return [value] внутри генератора. Но я проверил ваш код и, кажется, работает.

Дополнительная информация о Python SyntaxError: ("return" с аргументом внутри генератора ",)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...