-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
68 lines (59 loc) · 2.17 KB
/
Copy pathmain.py
File metadata and controls
68 lines (59 loc) · 2.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import argparse
from douban_movie_scraper.crawler import DoubanMovieCrawler
from douban_movie_scraper.pipeline import DoubanMoviePipeline
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Crawl latest short comments for Douban Movie Top250."
)
parser.add_argument("--top-m", type=int, default=5, help="Top m movies to crawl.")
parser.add_argument("--pages", type=int, default=1, help="Comment pages per movie.")
parser.add_argument(
"--output-dir",
default="data/douban_movie_top250",
help="Directory for per-movie JSON files.",
)
parser.add_argument(
"--cookie",
default="",
help="Douban cookie. You can also fill DOUBAN_COOKIE in config.py.",
)
parser.add_argument(
"--rating-strategy",
choices=("drop", "zero", "none"),
default="drop",
help="How to handle comments without rating.",
)
parser.add_argument(
"--comment-sort",
default="time",
help="Douban comment sort, default time for latest comments.",
)
parser.add_argument("--sleep", type=float, default=1.0, help="Request interval in seconds.")
return parser.parse_args()
def main() -> None:
args = parse_args()
crawler = DoubanMovieCrawler(cookie=args.cookie, sleep_seconds=args.sleep)
pipeline = DoubanMoviePipeline(
output_dir=args.output_dir,
rating_strategy=args.rating_strategy,
)
try:
movies = crawler.fetch_top_movies(args.top_m)
saved_paths = []
for movie in movies:
movie.comment_list = crawler.fetch_movie_comments(
movie.movie_id,
args.pages,
comment_sort=args.comment_sort,
)
movie = pipeline.process_movie(movie)
saved_paths.append(pipeline.save_movie(movie))
except RuntimeError as error:
raise SystemExit(f"crawl_failed={error}") from error
index_path = pipeline.save_index(movies)
print(f"crawled_movies={len(movies)}")
print(f"saved_index={index_path}")
for path in saved_paths:
print(f"saved_movie={path}")
if __name__ == "__main__":
main()