ヤフーの画像検索画面から
一枚目の画像だけを
スクレイピングしたいという事で
ググってみました。
こちらを参照しました。
https://su-gi-rx.com/archives/976
そして下のコードを書きました。
python
1 2import requests # urlを読み込むためrequestsをインポート 3from bs4 import BeautifulSoup # htmlを読み込むためBeautifulSoupをインポート 4 5image_seach_urls = [] 6#別のコードでyahoo画像検索の検索ワードを変えて作成した複数のURLが格納されています 7 8images = [] # 画像リストの配列 9 10for image_seach_url in image_seach_urls: 11 soup = BeautifulSoup(requests.get(image_seach_url).content,'lxml') # bsでURL内を解析 12 13for link in soup.find("img"): # imgタグを取得しlinkに格納 14 if link.get("src").endswith(".jpg"): # imgタグ内の.jpgであるsrcタグを取得 15 images.append(link.get("src")) # imagesリストに格納 16 elif link.get("src").endswith(".png"): # imgタグ内の.pngであるsrcタグを取得 17 images.append(link.get("src")) # imagesリストに格納 18 19for target in images: # imagesからtargetに入れる 20 re = requests.get(target) 21 with open('img/' + target.split('/')[-1], 'wb') as f: # imgフォルダに格納 22 f.write(re.content) # .contentにて画像データとして書き込む 23 24print("ok") # 確認
こちらを実行しても
for link in soup.find("img"): # imgタグを取得しlinkに格納 TypeError: 'NoneType' object is not iterable
こういったエラーが出てしまいます。
エラーの内容をググったら
デフォルト引数が渡されなかった場合に
発生するエラー。値はNoneのみとのこと
といったような内容が出てきます
yahooの画像検索画面の
開発者ツールのコードを見ると
ちゃんと画像がimgタグにあったのが
確認できたので
残り考えられる点
として三行目の
image_seach_urls = []
に問題があるということでしょうか?
もし問題があるとしたら
心あたりがあり
image_seach_urls = []の中身を
print(image_seach_urls)で実行すると
python
1['https://search.yahoo.co.jp/image/search?p=aaa&fr=top_ga1_sa&ei=UTF-8&ts=', 2'https://search.yahoo.co.jp/image/search?p=bb bb&fr=top_ga1_sa&ei=UTF-8&ts=', 3'https://search.yahoo.co.jp/image/search?p=c c c&fr=top_ga1_sa&ei=UTF-8&ts=', 4. 5. 6. 7'https://search.yahoo.co.jp/image/search?p=zzzz zzz&fr=top_ga1_sa&ei=UTF-8&ts=']
このようにsearch?p=以降の部分を
私の検索したいワードに変更された状態で出てくるのですが
ワードの間に空白があるものがあり
一つのURLになってないような気がします
実行結果でURLにカーソルをあてても
URL一行すべてに下線が入らないからです
でも、このURLをコピペして検索すると
ちゃんと検索されるので大丈夫かなと
思ってたのですが、
これがエラーの原因になってる可能性って
あると思いますか?
教えていただけると幸いです。
宜しくお願い致します。
最終的に私のやりたいことは、
検索ワードを変え、それぞれ一枚ずつ
スクレイピングしていきたいのですが
ひとまずは、今出てるエラーを解消したいです。
長文失礼いたしました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/04 10:45