diff --git a/snscrape/_cli.py b/snscrape/_cli.py index 9f846b8..c0bb32d 100644 --- a/snscrape/_cli.py +++ b/snscrape/_cli.py @@ -6,6 +6,7 @@ import datetime import importlib.metadata import inspect import logging +import os import requests # Imported in parse_args() after setting up the logger: #import snscrape.base @@ -307,32 +308,36 @@ def main(): i = 0 with _dump_locals_on_exception(): - if args.withEntity and (entity := scraper.entity): - if args.jsonl: - print(entity.json()) + try: + if args.withEntity and (entity := scraper.entity): + if args.jsonl: + print(entity.json()) + else: + print(entity) + if args.maxResults == 0: + logger.info('Exiting after 0 results') + return + for i, item in enumerate(scraper.get_items(), start = 1): + if args.since is not None and item.date < args.since: + logger.info(f'Exiting due to reaching older results than {args.since}') + break + if args.jsonl: + print(item.json()) + elif args.format is not None: + print(args.format.format(item)) + else: + print(item) + if args.progress and i % 100 == 0: + print(f'Scraping, {i} results so far', file = sys.stderr) + if args.maxResults and i >= args.maxResults: + logger.info(f'Exiting after {i} results') + if args.progress: + print(f'Stopped scraping after {i} results due to --max-results', file = sys.stderr) + break else: - print(entity) - if args.maxResults == 0: - logger.info('Exiting after 0 results') - return - for i, item in enumerate(scraper.get_items(), start = 1): - if args.since is not None and item.date < args.since: - logger.info(f'Exiting due to reaching older results than {args.since}') - break - if args.jsonl: - print(item.json()) - elif args.format is not None: - print(args.format.format(item)) - else: - print(item) - if args.progress and i % 100 == 0: - print(f'Scraping, {i} results so far', file = sys.stderr) - if args.maxResults and i >= args.maxResults: - logger.info(f'Exiting after {i} results') + logger.info(f'Done, found {i} results') if args.progress: - print(f'Stopped scraping after {i} results due to --max-results', file = sys.stderr) - break - else: - logger.info(f'Done, found {i} results') - if args.progress: - print(f'Finished, {i} results', file = sys.stderr) + print(f'Finished, {i} results', file = sys.stderr) + except BrokenPipeError: + os.dup2(os.open(os.devnull, os.O_WRONLY), sys.stdout.fileno()) + sys.exit(1)