2016-12-19 12 views
0

Webスクレイピングコードの一部をRからPythonに変換しています(geckodriverをRで動作させることはできませんが、Pythonで動作します)。とにかく、PythonでHTMLテーブルを解析して読む方法を理解しようとしています。ここでは、Rのためのコードです。Selenium PythonでHTMLを解析してHTMLテーブルを読む

doc <- htmlParse(remDr$getPageSource()[[1]],ignoreBlanks=TRUE, replaceEntities = FALSE, trim=TRUE, encoding="UTF-8") 

WebElem <- readHTMLTable(doc, stringsAsFactors = FALSE)[[7]] 

私はHTMLページをdocオブジェクトに解析します。その後、私はdoc[[1]]で始まり、私が望むデータが見えるまで大きな数字を移動します。この場合、私はdoc[[7]]に行き、私が望むデータを見た。私はそのHTMLテーブルを読んでWebElemオブジェクトに割り当てます。最終的には、これをデータフレームに変換して再生します。

だから私はPythonでやっていることはこれです:

html = None 
doc = None 
html = driver.page_source 
doc = BeautifulSoup(html) 

それから私はdoc.get_textと遊ぶことを始めたが、私は本当に私が見たいだけのデータを取得する方法がわかりません。私が見たいデータは、10x10のマトリックスのようなものです。私がRを使用したときは、doc[[7]]を使用して、その行列をデータフレームに変換するための完全な構造になっていました。しかし、私はPythonでそれをすることはできません。アドバイスをいただければ幸いです。

はUPDATE: - :Python Web-Scraping

私は、私は、Pythonを使って必要なデータを取得することができた私は、Pythonでのデータフレームを作成するためのこのブログに従いました。そのブログで取り組んでいるウェブサイトは次のとおりです:Most Popular Dog Breedsそのブログ記事では、要素を練習し、辞書を作成し、テーブルの各行をループし、各列にデータを格納してからデータフレームを作成する必要があります。 R、私がいた書かなければならなかった唯一のコードで

:ちょうどそれと

doc <- htmlParse(remDr$getPageSource()[[1]],ignoreBlanks=TRUE, replaceEntities = FALSE, trim=TRUE, encoding="UTF-8")

df <- as.data.frame(readHTMLTable(doc, stringsAsFactors = FALSE)

、私は列名のみを調整する必要がかなりいいのデータフレームを持っており、データタイプ - それはちょうどそのコードを次のようになります。

NULL.V1 NULL.V2 NULL.V3 NULL.V4 1 BREED 2015 2014 2013 2 Retrievers (Labrador) 1 1 1 3 German Shepherd Dogs 2 2 2 4 Retrievers (Golden) 3 3 3 5 Bulldogs 4 4 5 6 Beagles 5 5 4 7 French Bulldogs 6 9 11 8 Yorkshire Terriers 7 6 6 9 Poodles 8 7 8 10 Rottweilers 9 10 9

Pythonでこれをもっと簡単にするためのものはありませんか?Rはデータフレーム用に構築されているので(これは少なくとも私には見えますが、間違っている可能性があります)

+0

最も重要なアドバイス - 常にあなたのデータにURLを追加してください。すべてのページが異なっており、アドバイスを提供するためにHTMLを参照する必要があります。 – furas

+0

こんにちは@furas、私はそれを追加しましたが、プライベートURLです。私はこれが難しいことを知っている。私のポストで似たような行列を作るのが助かるでしょうか? –

+2

HTMLを例として追加することができれば便利です。 – furas

答えて

0

[OK]を、私は良い解決に来ているように感じる周りのいくつかの掘り出した後 - Rと一致します。そして、あなたが探している

tbl = driver.find_element_by_xpath("//html/body/main/article/section[2]/div/article/table").get_attribute('outerHTML')

df = pd.read_html(tbl)

:あなたは、上記のリンクで提供されたHTMLを見てDog Breeds、そしてあなたがそのリンクのために実行されているウェブ・ドライバーを持っている場合は、次のコードを実行することができますコードの唯一の数行後にかなりいいデータフレーム:私はこのように感じる

In [145]: df Out[145]: [ 0 1 2 3 0 BREED 2015 2014 2013.0 1 Retrievers (Labrador) 1 1 1.0 2 German Shepherd Dogs 2 2 2.0 3 Retrievers (Golden) 3 3 3.0 4 Bulldogs 4 4 5.0 5 Beagles 5 5 4.0

はを通じて作業よりもはるかに簡単ですタグを作成し、dictを作成し、ブログが示唆するようにデータの各行をループします。私はPythonにはまったく新しかったですが、仕事をすばやく完了させることができます。私は、これがいくつかの仲間のウェブスクレイパーに役立つことを願っています。

+0

「pd.read_html(tbl)」に「pd」とは何ですか? –

+1

'import pandas as pd' –

-2

まず、Selenium with Pythonを読んで、SeleniumがPythonでどのように動作するかの基本的な考え方が得られます。

より、あなたはPythonで要素を検索したい場合は、けん引の方法があります:

  1. 利用セレンAPI、あなたはLocating Elements
  2. UseBeautifulSoupを参照することができ、素敵なドキュメントがありますが BeautifulSoupDocumentation
  3. 読むことができます