Scrapy AttributeError: у объекта «Селектор» нет атрибута «extract_first» - PullRequest
0 голосов
/ 11 февраля 2019

При сканировании страницы https://github.com/rg3/youtube-dl/pull/11272 в Scrapy 1.6, когда я выбираю с помощью селектора:

// div [@class = 'file js-comment-container js-resolvable-timeline-thread-container ']

если вы используете его в своем браузере или что-то еще, не забудьте заблокировать JS.

результатом будет то, что не имеет атрибута 'extract_first'.

Например, при запуске этого кода будет возникать ошибка:

for code_and_comment in response.xpath(
        "//div[@class = 'file js-comment-container js-resolvable-timeline-thread-container']"):
    if code_and_comment is None:
        print('it is NONE')
    print(code_and_comment.extract_first())

Я не могу этого понятьВы знаете, где я не прав?заранее спасибо.

  • ПРИМЕЧАНИЕ: да, я знаю о robot.text и даже ROBOTSTXT_OBEY = False
  • ПРИМЕЧАНИЕ2: Я думаю, что динамический JavaScript не проблема, я пробовал этот Xpath с моим браузером с JavaScript выключен , и это сработало хорошо.

1 Ответ

0 голосов
/ 11 февраля 2019

Причина в том, что в вашем коде code_and_comment уже является одиночным селектором, поэтому нет смысла иметь extract_first.Он работает только со списком селекторов (это то, что вы получаете от response.xpath(...)).

Вы можете просто сделать следующее:

for code_and_comment in response.xpath(
        "//div[@class = 'file js-comment-container js-resolvable-timeline-thread-container']"):
    if code_and_comment is None:
        print('it is NONE')
    print(code_and_comment.extract())
...