ответный запрос работает в оболочке, но в коде выдает SyntaxError: неверный синтаксис - PullRequest
0 голосов
/ 17 февраля 2020

Если я сделаю

scrapy shell https://en.wikipedia.org/wiki/Electric_battery

, а затем

response.css('h1#firstHeading::text').extract()

, я получу правильный вывод

['Electric battery']

Но если я сделаю этот код python ;

import scrapy


class WikiSpider(scrapy.Spider):
    name = 'wiki'
    allowed_domains = ['wikipedia.com']
    start_urls = ['https://en.wikipedia.org/wiki/Electric_battery']

    def parse(self, response):
        print response.css('h1#firstHeading::text').extract()

и я запускаю его, я получаю сообщение об ошибке

C:\python\wikipedia>scrapy runspider wiki
Traceback (most recent call last):
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\runpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\thega\AppData\Local\Programs\Python\Python38-32\Scripts\scrapy.exe\__main__.py", line 7, in <module>
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\cmdline.py", line 145, in execute
    cmd.crawler_process = CrawlerProcess(settings)
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\crawler.py", line 267, in __init__
    super(CrawlerProcess, self).__init__(settings)
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\crawler.py", line 145, in __init__
    self.spider_loader = _get_spider_loader(settings)
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\crawler.py", line 347, in _get_spider_loader
    return loader_cls.from_settings(settings.frozencopy())
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\spiderloader.py", line 61, in from_settings
    return cls(settings)
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\spiderloader.py", line 25, in __init__
    self._load_all_spiders()
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\spiderloader.py", line 47, in _load_all_spiders
    for module in walk_modules(name):
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\site-packages\scrapy\utils\misc.py", line 73, in walk_modules
    submod = import_module(fullpath)
  File "c:\users\thega\appdata\local\programs\python\python38-32\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 779, in exec_module
  File "<frozen importlib._bootstrap_external>", line 916, in get_code
  File "<frozen importlib._bootstrap_external>", line 846, in source_to_code
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\python\wikipedia\wikipedia\spiders\wiki.py", line 11
    print response.css('h1#firstHeading::text').extract()
          ^
SyntaxError: invalid syntax

Я беру код из учебника по адресу https://www.makeuseof.com/tag/build-basic-web-crawler-pull-information-website-2/

Я запутался, как неправильный синтаксис, когда он был протестирован на работу в оболочке ???

1 Ответ

0 голосов
/ 18 февраля 2020

вы пишете код для python 2, но, запустив его в python 3, вам не хватает скобок, вот способ сделать это

import scrapy


class WikiSpider(scrapy.Spider):
    name = 'wiki'
    allowed_domains = ['wikipedia.com']
    start_urls = ['https://en.wikipedia.org/wiki/Electric_battery']

    def parse(self, response):
        print(response.css('h1#firstHeading::text').extract())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...