Log

いろいろ

URIフラグメントに対するスクレイピング

スクレイピング中に気になったのでメモ。

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となります。

そのためrequestsBeautifulSoupを用いてスクレイピングをする場合には一工夫が必要になります。

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

めでたしめでたし。