2012-03-05 10 views
5

私はちょうどPythonを使ってWebスクレイピングを学び始めました。しかし、私はすでにいくつかの問題に遭遇しています。Web Pythonを使用したデータのスクレイピング?

私の目標は、Webスクラップにfishbase.org(http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=salmon)とは異なるマグロ種の名前

問題です:私はすべての種名を抽出できません。

これは私がこれまで持っているものされています

import urllib2 
from bs4 import BeautifulSoup 

fish_url = 'http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=Tuna' 
page = urllib2.urlopen(fish_url) 

soup = BeautifulSoup(html_doc) 

spans = soup.find_all(

ここから、私は種名を抽出しに行くか方法がわかりません。私は、任意の入力が高く評価されます!ウェブページを見てみると

答えて

2

、私は正確にどのような情報についてはよく分からない...タグ内のテキストをキャプチャするために正規表現(すなわちsoup.find_all("a", text=re.compile("\d+\s+\d+"))を使用しての

を考えました。あなたはしかし、抽出したい、あなたは簡単にtext属性を使用してタグ内のテキストを得ることができることに注意してください:。

>>> from bs4 import BeautifulSoup 
>>> html = '<a>some text</a>' 
>>> soup = BeautifulSoup(html) 
>>> [tag.text for tag in soup.find_all('a')] 
[u'some text'] 
0

あなたが長期的な解決策が必要な場合は、scrapyを試してみてくださいそれは非常に簡単であるとの多くを行います非常にカスタマイズ可能で拡張性があります。xpathを使用して必要なすべてのURLを抽出します。これはm鉱石は楽しく信頼できる。まだ治療中であれば、必要に応じて再使用することができます。あなたが同様にすべての学名(とのみ学名は)<i/>タグであるという事実を利用するかもしれない

4

:BSや正規表現を使用して

scientific_names = [it.text for it in soup.table.find_all('i')] 

は、Webページを解析するには、2つの異なるアプローチです。前者は存在するので、後者をあまり気にする必要はありません。

あなたが実際に何をするかBS上に読んでください、あなたがその有用性を過小評価しているように、それはそうです。

4

jozekは正しいアプローチですが、私は彼のスニペットを動作させることができませんでした(しかし、これはBeautifulSoup 4ベータ版を実行していないためかもしれません)。どのような私のために働いていたことだった。

import urllib2 
from BeautifulSoup import BeautifulSoup 

fish_url = 'http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=Tuna' 
page = urllib2.urlopen(fish_url) 

soup = BeautifulSoup(page) 

scientific_names = [it.text for it in soup.table.findAll('i')] 

print scientific_names 
+2

実際 'findAll'はにfind_all''に名前が変更されましたpep8に準拠すること。詳細については[こちら](http://www.crummy.com/software/BeautifulSoup/bs4/doc/#method-names)。 – jcollado

1

おかげでみんな...私はこのコードを持っていた問題を解決することができました:

import urllib2 
from bs4 import BeautifulSoup 

fish_url = 'http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=Salmon' 
page = urllib2.urlopen(fish_url) 
html_doc = page.read() 
soup = BeautifulSoup(html_doc) 

scientific_names = [it.text for it in soup.table.find_all('i')] 

for item in scientific_names: 
print item 
+2

は正しい答えとして最もあなたを助けた答えを受け入れることを忘れないでください。 – BioGeek

+0

...それは正しいものとしてJoeの回答マークに適切であろうので...これは誰年代を考えて答えることでジャンプから人々を維持するのに役立ちますが、あなたのためにそれを働きました。 – CLaFarge

関連する問題