no-image

二重forループは使えない。webbrowseropen【python】

webbrowseropenを2重forループしようとすると失敗する?

webbrowseropenってなに?

pythonではwebbrowseropenというモジュールを使うことによってブラウザを開くことができます。

プログラムコードの解説

問題はこのwebbrowseropenでforループの二重ループが使えないことです。

例をみてみましょう。

import requests, sys, webbrowser, bs4

print('【1】googling...') #ダウンロード中
res = requests.get('https://www.google.co.jp/search?q=' + ' '.join(sys.argv[1:]) + '&start=0')
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text)
link_elems = soup.select('.r a')
num_open = min(10, len(link_elems))
for i in range(num_open):
 webbrowser.open('https://www.google.co.jp' + link_elems[i].get('href'))

4行目で’&start=0’と最後につけているのがおわかりいただけますでしょうか。これはグーグルの1ページ目を表しています。つまり、ページ数文字列をリストにしてforループで回せばよいのではないかと思ったのです。

  • pagelist = [‘1’, ‘2’, ‘3’]
  • for page in pagelist:

このようにすることで二重ループを使ってwebbrowser.openもループしようとしました。しかしデバッグした結果。二重ループの先に進めませんでした。原因はわかりません。

しかし、別に実現不可能というわけではありません。ただ単に長いコードを3つおけばいいだけです。品質は悪いですが、一応次ページ分も一気に開けるという情報でした。