オンラインブックマークサービスで自分のアカウントからデータをスクラップしようとしています。ブックマークのあるページは、次のように構成されています。Python Web Scraping:複数のタグを持つ1つの属性を抽出します。
<!DOCTYPE html>
<html lang="en">
<body>
<div id="item1" class="outer_block">
<div class="title">Bookmark 1</div>
<div class="link">
<a href="https://bookmark1.com">https://bookmark1.com</a>
</div>
<div class="tags">
<a href="http://mylink.com/tag1">tag1</a>
<a href="http://mylink.com/tag2">tag2</a>
</div>
</div>
<div id="item2" class="outer_block">
<div class="title">Bookmark 2</div>
<div class="link">
<a href="https://bookmark2.com">https://bookmark2.com</a>
</div>
<div class="tags">
<a href="http://mylink.com/tag1">tag1</a>
</div>
</div>
<div id="item3" class="outer_block">
<div class="title">Bookmark 3</div>
<div class="link">
<a href="https://bookmark3.com">https://bookmark3.com</a>
</div>
<div class="tags">
<a href="http://mylink.com/tag3">tag3</a>
</div>
</div>
</body>
</html>
各ブロックについて、タイトル、リンク、タグを抽出したいと思います。 のPython 3.5では、私が行います
# Import modules
import requests
from lxml import html
# Read the html
# url = 'mylink'
# page = requests.get(url)
# tree = html.fromstring(page.content)
# This is the replicable example
tree = html.fromstring('<!DOCTYPE html><html lang="en"><body><div id="item1" class="outer_block"> <div class="title">Item 1</div> <div class="link"> <a href="https://bookmark1.com">https://bookmark1.com</a> </div> <div class="tags"> <a href="http://mylink.com/tag1">tag1</a> <a href="http://mylink.com/tag2">tag2</a> </div></div><div id="item2" class="outer_block"> <div class="title">Item 2</div> <div class="link"> <a href="https://bookmark2.com">https://bookmark2.com</a> </div> <div class="tags"> <a href="http://mylink.com/tag1">tag1</a> </div></div><div id="item3" class="outer_block"> <div class="title">Item 3</div> <div class="link"> <a href="https://bookmark3.com">https://bookmark3.com</a> </div> <div class="tags"> <a href="http://mylink.com/tag3">tag3</a> </div></div></body></html>')
は、私は、文字列のパターンを抽出するためにxpath
を使用し、言うタイトル:
titles = tree.xpath('//div[@class="title"]/text()')
print(titles)
[ 'ブックマーク1'、 'ブックマーク2'、 'ブックマーク3'
tags = tree.xpath('//div[@class="tags"]//a/text()')
print(tags)
[」:]
は、タグを抽出するために、私は、同じ原理を使用します
問題は各リンクにさまざまなタグがあるため、配列titles
と配列tags
を関連付けることができないということです。 私は、各ブロックを抽出して、別々に仕事ができると思った:私は理解していないが、私はblock1
からタグを抽出するとき、それはまだ元のHTMLのタグのすべてを維持することである
blocks = tree.xpath('//div[@class="outer_block"]')
block1 = blocks[0]
。
tags_block1 = block1.xpath('//div[@class="tags"]//a/text()'
print(tags_block1)
最高出力フォーマットであり、そこに他の何であるか[「タグ1」、「TAG2」、「TAG1」、「TAG3」]私はタイトルと対応するタグを抽出するにはどうすればよい
、より簡単に仕事をすることができるパッケージ?