#oyasuminase

駆け出しオタクエンジニア

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となります。そのためrequestsBeautifulSoupを用いてスクレイピングをする場合には一工夫が必要になります。

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')

めでたしめでたし。