Pythonを初めて数日の初心者で、プログラミングも勉強始めたばかりです。
最終的にWebスクレイピングができるようになりたいと思っています。
検索してもわからなく、つまづいているので詳しい方教えて下さいm(__)m
※Windows10のコマンドプロンプトから実行しています。
※Webスクレイピングの規約は確認しています。
★やりたいこと★
指定したURLのページから全ての画像を取り出すコードを作成したのですが、
URLの部分を変更して
CSVにリスト化したURLを順番にスクレイピングしていきたい。
C:\python/tabelog.csv
その後はフォルダ分けもやっていけたらと思っています。
■問題■
ForでLoopすることぐらいしか分からず
どこにどう追加していいか検討もつきません。。。
ほんとにすいません。ヒントでもいただけると本当に助かります。
■参考にしているサイト■
https://hashikake.com/scraping_img#source
★使用しているコード★
Python
1#●画像ファイルをダウンロードするための準備 2# ①-①.ライブラリをインポート 3import time 4import re 5import requests 6from pathlib import Path 7from bs4 import BeautifulSoup 8# ①-②.出力フォルダを作成 9output_folder = Path('C:\python\img') 10output_folder.mkdir(exist_ok=True) 11# ①-③.スクレイピングしたいURLを設定 12url = 'https://tabelog.com/tokyo/A1303/A130302/13219514/dtlmenu/' 13 14# ①-④.画像ページのURLを格納するリストを用意 15linklist = [] 16 17#●検索結果ページから画像のリンクを取り出す 18# ②-①.検索結果ページのhtmlを取得 19html = requests.get(url).text 20# ②-②.検索結果ページのオブジェクトを作成 21soup = BeautifulSoup(html, 'lxml') 22# ②-③.画像リンクのタグをすべて取得 23a_list =soup.select('div.rstdtl-menu-lst__img') 24 25# ②-④.画像リンクを1つずつ取り出す 26for a in a_list: 27# ②-⑤.画像ページのURLを抽出 28 link_url = a.img['src'] 29# ②-⑥.画像ページのURLをリストに追加 30 linklist.append(link_url) 31 #time.sleep(1.0) 32 33 # ③-⑦.画像ファイルの名前を抽出 34 filename = re.search(".*/(.*png|.*jpg)$",link_url) 35 # ③-⑧.保存先のファイルパスを生成 36 save_path = output_folder.joinpath(filename.group(1)) 37 time.sleep(1.0) 38 # ●画像ファイルのURLからデータをダウンロード 39 try: 40 # ④-①.画像ファイルのURLからデータを取得 41 image = requests.get(link_url) 42 # ④-②.保存先のファイルパスにデータを保存 43 open(save_path, 'wb').write(image.content) 44 # ④-③.保存したファイル名を表示 45 print(save_path) 46 time.sleep(1.0) 47 except ValueError: 48 # ④-④.失敗した場合はエラー表示 49 print("ValueError!")
宜しくお願いします。
#頂いた回答を参考にもう1度コードを書いてみたのですが、次は1種類しか画像が取得できなくなりました。
エラーは出ません。
もう1度見ていただいてもよろしいでしょうか。
Python
1#●画像ファイルをダウンロードするための準備 2# ①-①.ライブラリをインポート 3import time 4import re 5import requests 6from pathlib import Path 7from bs4 import BeautifulSoup 8 9# 出力フォルダを作成 10output_folder = Path('C:\python\img') 11output_folder.mkdir(exist_ok=True) 12 13# スクレイピングしたいURLを設定 14import pandas as pd 15 16csv_file = r"C:\python\tabelog.csv" 17df = pd.read_csv(csv_file) 18# NOTE: df.列名.tolist()で指定列をリスト化する 19url_list = df.URL.tolist() 20 21# 画像ページのURLを格納するリストを用意 22linklist = [] 23 24for url in url_list: 25 # ②-①.検索結果ページのhtmlを取得 26 html = requests.get(url).text 27 # ②-②.検索結果ページのオブジェクトを作成 28 soup = BeautifulSoup(html, 'lxml') 29 # ②-③.画像リンクのタグをすべて取得 30 a_list =soup.select('div.rstdtl-menu-lst__img') 31 32 # ②-④.画像リンクを1つずつ取り出す 33 for a in a_list: 34 # ②-⑤.画像ページのURLを抽出 35 link_url = a.img['src'] 36 # ②-⑥.画像ページのURLをリストに追加 37 linklist.append(link_url) 38 time.sleep(1.0) 39 40 # ③-⑦.画像ファイルの名前を抽出 41 filename = re.search(".*/(.*png|.*jpg)$",link_url) 42 # ③-⑧.保存先のファイルパスを生成 43 save_path = output_folder.joinpath(filename.group(1)) 44 time.sleep(1.0) 45 # ●画像ファイルのURLからデータをダウンロード 46 try: 47 # ④-①.画像ファイルのURLからデータを取得 48 image = requests.get(link_url) 49 # ④-②.保存先のファイルパスにデータを保存 50 open(save_path, 'wb').write(image.content) 51 # ④-③.保存したファイル名を表示 52 print(save_path) 53 time.sleep(1.0) 54 except ValueError: 55 # ④-④.失敗した場合はエラー表示 56 print("ValueError!")
このコードの結果↓
10499
C:\python\img\150x150_square_83722393.jpg
10499
C:\python\img\150x150_square_83722393.jpg
です。何度もすいません。
宜しくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/01 03:49
退会済みユーザー
2020/04/01 03:51
2020/04/01 03:56
2020/04/01 04:16
退会済みユーザー
2020/04/01 04:29
2020/04/01 05:12