URL http://www.smartmoney.com/quote/FAST/?story=financials&timewindow=1&opt=YB&isFinprint=1&framework.view=smi_emptyViewを前提として、データの行全体のコンテンツをどのようにキャプチャして印刷しますか?
たとえば、「Cash&Short Term Investments 144,841 169,760 189,252 86,743 57,379」のような出力を取得するには、何が必要でしょうか。または、「不動産、プラント、設備-総計725,104 632,332 571,467 538,805 465,493」のようなものですか?
私はサイトhttp://www.techchorus.net/web-scraping-lxmlを通じてXpathの基本を紹介しました。ただし、Xpath構文はまだ私にはほとんど謎です。
私はすでにBeautifulSoupでこれを成功させました。BeautifulSoupではファイルの構造を知る必要がないという事実が気に入っています。検索するテキストを含む要素を検索するだけです。残念ながら、BeautifulSoupは、これを何千回も実行しなければならないスクリプトには遅すぎます。BeautifulSoupでの私のタスクのソースコードは次のとおりです(title_inputは "Cash&Short Term Investments"と同じです):
page = urllib2.urlopen (url_local)
soup = BeautifulSoup (page)
soup_line_item = soup.findAll(text=title_input)[0].parent.parent.parent
list_output = soup_line_item.findAll('td') # List of elements
では、lxmlの同等のコードは何でしょうか?
編集1:私が最初に投稿したときにURLが隠されていました。私は今それを修正しました。
編集2:私がやろうとしていることを明確にするためにBeautifulSoupベースのソリューションを追加しました。
編集3:ソリューションのルートに+10。同じ質問を持つ将来の開発者の利益のために、私はここに私のために働いた簡単で汚いスクリプトを投稿しています:
#!/usr/bin/env python
import urllib
import lxml.html
url = 'balancesheet.html'
result = urllib.urlopen(url)
html = result.read()
doc = lxml.html.document_fromstring(html)
x = doc.xpath(u'.//th[div[text()="Cash & Short Term Investments"]]/following-sibling::td/text()')
print x