スクレイピング初学者です。
pythonでyoutubeの動画情報をスクレイピングし、
MongoDBに格納して検索をするコードを入れたのですが、
MongoDBを起動して、下記のコードを入力するとエラーが出て
前に進めません。どなたかエラーの解消方法を教えてください
forego run python <ファイルパス>
uncaught exception: SyntaxError: unexpected token: identifier :
@(shell):1:7
python3
1from settings import YOUTUBE_API_KEY 2import os 3import logging 4from typing import Iterator, List 5 6from apiclient.discovery import build 7from pymongo import MongoClient, ReplaceOne, DESCENDING 8from pymongo.collection import Collection 9 10YOUTUBE_API_KEY = os.environ.get('YOUYUBE_API_KEY') 11logging.getLogger('googleapiclient.discovery_cache').setLevel(logging.ERROR) 12 13def main(): 14 mongo_client = MongoClient('location', 27017) 15 collection = mongo_client.youtube.videos 16 17 for items_per_page in search_videos('手芸'): 18 save_to_mongodb(collection, items_per_page) 19 20 show_top_videos(collection) 21 22 23def search_videos(query: str, max_pages: int=5) -> Iterator[List[dict]]: 24 youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY) 25 26 search_request = youtube.search().list( 27 part='id', 28 q=query, 29 type='video', 30 maxResults=50, 31 ) 32 33 i = 0 34 while search_request and i < max_pages: 35 search_response = search_request.execute() 36 video_ids = [item['id']['videoId'] for item in search_response['items']] 37 38 videos_response = youtube.videos().list( 39 part='snippet,statistics', 40 id=','.join(video_ids) 41 ).execute() 42 43 yield videos_response['items'] 44 45 searche_request = youtube.search().list_next(search_request, search_response) 46 47def save_to_mongodb(collection: Collection, items: List[dict]): 48 for item in items: 49 item['_id'] = item['id'] 50 for key, value in item['statistics'].items(): 51 item['statistics'][key] = int(value) 52 53 operations = [ReplaceOne({'_id': item['_id']}, item, upsert=True) for item in items] 54 result = collection.bulk_write(operations) 55 logging.info(f'Upserted {result.upserted_count} documents.') 56 57def show_top_videos(collection: Collection): 58 for item in collection.find().sort('statistics.viewCount', DESCENDING).limit(5): 59 print(item['statistics']['viewCount'], item['snippet']['title']) 60 61if __name__ == '__main__': 62 logging.basicConfig(level=logging.INFO) 63 main()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/28 08:20