【Python】xPath指定でスクレイピングするよ

モジュールlxml,requestsを使ってスクレイピングをしてみますlxmlではxpath指定によるスクレイピングが可能みたい

とり方はいくつかあります

おすすめのとり方


import lxml.html
import requests

# Xpathで取得してみる
test_url = "http://www.example.com/"
girl_url = "https://girlschannel.net/"
mixi_url = "https://news.mixi.jp/?from=l_navi"

#requestsを使ってスクレイピング
# HTMLソースを得る
r = requests.get(girl_url)
html = r.text

# HTMLをHtmlElementオブジェクトにする
root = lxml.html.fromstring(html)    

# XPathを指定して該当する要素のリストを得る
path_string = '/html/head/title'
path_string = '/html/body/div[1]/div[1]/div[1]/ul[1]/li[1]/a'
dl = root.xpath(path_string)

# 返り値はリスト型で返ってくる
print('dl:')
pprint(dl)

for val in dl:
    print('val:')
    print(val)
    print('val.text:')
    print(val.text)
    
    # 以下二通りの書き方で指定した属性の値を取れる
    girl_title = val.attrib['href']
    girl_title = val.get('href')

#girl_title = dl[0].href
#girl_title = titleH1[0].a

result = {
    'result1': girl_title,
}
#result = girl_title
return render(request, 'index.html', result)

注目部分は

    # 以下二通りの書き方で指定した属性の値を取れる
    girl_title = val.attrib['href']
    girl_title = val.get('href')

取りたい情報の属性を要素のリストに対し.attribか.getで属性を指定すると取れる

参考サイトはこちら

あとこちら

以下別の書き方でやってみる


import lxml.html
import requests



    # スクレイピングするサイトURL
    girl_url = "https://girlschannel.net/"

    #requestsを使ってスクレイピング
    # HTMLソースを得る
    r = requests.get(girl_url)
    html = r.text

    # HTMLをHtmlElementオブジェクトにする
    root = lxml.html.fromstring(html)    

    # XPathを指定して該当する要素のリストを得る
    path_string = '/html/head/title'

    # 返り値はリスト型で返ってくる
    print('titleH1:')
    pprint(titleH1)

    # とり方はいくつかある
    #.
    # リストの1番目のテキストを表示する
    print('titleH1[0].text:')
    pprint(titleH1[0].text)
    girl_title = titleH1[0].text

    result = {
        'result1': girl_title,
    }
    return render(request, 'index.html', result)

取れてるデータの出力

titleH1:
[<Element title at 0x7ff45e9aa4f8>]
titleH1[0].text:
'ガールズちゃんねる - Girls Channel -'



注目部分は

# リストの1番目のテキストを表示する
print('titleH1[0].text:')
pprint(titleH1[0].text)
girl_title = titleH1[0].text

要素のリストに対し.textでとってます

このやり方だとtext以外の書き方がわからなかったので最初に書いたやり方でやってます

こんな感じで指定したxpathの情報を取れました

今回はlxml,requestsを使ってスクレイピングしました

他にもこちらこちらの記事のようにScrapyというものを使ってもできるみたい

シェアする

  • このエントリーをはてなブックマークに追加

フォローする