モジュール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を使ってスクレイピングしました
コメント