お世話になっています。以下困っていますどうぞよろしくお願いします。
前提・実現したいこと
Pythonを使ってWSJOnlineのページをスクレイピングし、
特定の単語で検索した結果の記事リストを取得したいです。
まず序盤の典型的な流れとして、requestsライブラリで対象ページのurlを指定し、BeautifulSoup(BS)で解析しようとしています。
ただ、BSを使用して記事リストのタグ(search-results-sector)を辿ってみたところエラーが出て困ってしまいました。エラーの内容を見るにリストの取得ができなかったようです。
以前青空文庫のページで同様のノリのコードを試したときはうまく行っています。違いとしてはWSJの方がサイトにJSが使われていたり少々リッチな感じなので、そこの関係なのかと思っています。(不勉強なものでそこらへんがよくわかっていません、すみません。。)
●検索結果ページ
https://www.wsj.com/search/term.html?KEYWORDS=apps%20digital
発生している問題・エラーメッセージ
発生しているエラーメッセージは下記の通りです。
Traceback (most recent call last): File "/Users/userName/Desktop/01_ポータル/030_ITキャリア/031_VSCODE/0311_Python/180331_WSJOのコードその2/WSJOnlineのコード.py", line 42, in <module> wsjo.search_wsj('apps digital') File "/Users/userName/Desktop/01_ポータル/030_ITキャリア/031_VSCODE/0311_Python/180331_WSJOのコードその2/WSJOnlineのコード.py", line 35, in search_wsj ul = srs[0].select('div') IndexError: list index out of range
該当のソースコード
Python
1import requests, time, webbrowser 2from selenium import webdriver 3from bs4 import BeautifulSoup 4 5 6class WSJOnline: 7 def __init__(self, u, p): 8 self.url_top = 'https://www.wsj.com/asia' 9 self.url_sch = 'https://www.wsj.com/search/term.html?KEYWORDS=' 10 self.user = u 11 self.pw = p 12 13 def search_wsj(self, word): 14 # メソッド:単語を指定して検索する。 15 # https://www.wsj.com/search/term.html?KEYWORDS= に 16 # 検索ワードをくっつければ検索結果ページにいけるっぽい。 17 # この時、spaceは%20、"は%22。二語文は""でくくる。 18 19 sp_word = word.replace(' ', '%20') 20 ch_word = sp_word.replace('"', '%22') 21 target_url = self.url_sch + ch_word 22 23 response = requests.get(target_url) 24 response.encoding = response.apparent_encoding 25 26 bs = BeautifulSoup(response.text, 'html.parser') 27 28 srs = bs.select('div.search-results-sector') 29 ul = srs[0].select('div') 30 print(ul[0].text) #エラー概要の箇所 31 32 def list_get(self): 33 pass 34 35wsjo = WSJOnline('aaa', 'bbb') 36wsjo.search_wsj('apps digital')
試したこと
①''html.parser' を 'lxml'にして実行
→ IDLEの実行結果に「検索結果はありませんでした」と表示される。
→ ググってみましたがあんまりこの結果については記載なし、どういう意味なのか。タグがない?
補足情報(FW/ツールのバージョンなど)
Python 3.6.3
MacOS High Sierra 10.13.3
以上、よろしくお願いします。。
回答1件
あなたの回答
tips
プレビュー