スクレイピング中に気になったのでメモ。
URIフラグメントとは
リソース内部へのアンカーです。MDNではブックマークと表現しています。
以下はUlletのランキングページURL。ハッシュタグ以降の部分がURIフラグメント。
http://www.ullet.com/search.html#page/2
URIフラグメントを含むリクエスト
URIフラグメントはクライアント側で処理されるため、サーバーへのリクエストでは送信されません。
例えば、下記のようなケース。
# ランキングの2ページ目を取得する response = requests.get('http://www.ullet.com/search.html#page/2') soup = BeautifulSoup(response.text, 'html.parser')
この場合、response.text
に含まれるのはhttp://www.ullet.com/search.html
へのリクエストに対する返却htmlとなります。
そのためrequests
とBeautifulSoup
を用いてスクレイピングをする場合には一工夫が必要になります。
Seleniumを使う
Seleniumでブラウザ操作をエミュレートすれば、JavaScriptが評価され、目的のhtmlを取得できます。
# ブラウザ起動 driver = webdriver.Chrome() driver.get('http://www.ullet.com/search.html') # 2ページ目のボタンをクリック page_btn = driver.find_element_by_link_text('P.2') page_btn.click() # 現在のhtmlをBeautifulSoupに渡す soup = BeautifulSoup(driver.page_source, 'html.parser')
めでたしめでたし。