URIフラグメントに対するスクレイピング
スクレイピング中に気になったのでメモ。
URIフラグメントとは
リソース内部へのアンカーです。MDNではブックマークと表現しています。
以下はUlletのランキングページですがハッシュタグ以降の部分がURIフラグメント。
http://www.ullet.com/search.html#page/2
URIフラグメントを含むリクエスト
URIフラグメントはクライアントで処理されるためサーバーへのリクエストでは送信されません。
response = requests.get('http://www.ullet.com/search.html#page/2') soup = BeautifulSoup(response.text, 'html.parser')
上記のリクエストでは目的の2ページ目のhtmlは取得できずresponse.text
に含まれるのはhttp://www.ullet.com/search.html
のhtmlとなります。そのためrequests
とBeautifulSoup
を用いてスクレイピングをする場合には一工夫が必要になります。
Seleniumを使う
Seleniumでブラウザ操作をエミュレートすればJSが評価され無事目的の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')
めでたしめでたし。