2012-03-05 34 views
5

我刚开始学习使用Python的网页抓取。但是,我已经遇到了一些问题。使用python进行Web Scraping数据?

我的目标是网络废钢不同种类的金枪鱼从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(

从这里,我不知道我怎么会去提取物种名称。我想使用正则表达式(即soup.find_all("a", text=re.compile("\d+\s+\d+"))捕捉到标签内的文本...

任何投入将不胜感激!

回答

2

在网页看,我不知道究竟什么信息要提取但是请注意,您可以使用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矿石宜人可靠。如果你需要的话,scrapy还允许你使用re。

4

您不妨利用一个事实,即所有的科学名称(只有学名)是<i/>标签:

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

使用BS和正则表达式是两种不同的方法来解析网页。前者是存在的,所以你不必为后者打扰太多。

你应该阅读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 2012-03-05 09:13:48

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 2012-03-09 13:48:47

+0

...所以将乔的答案标记为正确的答案是恰当的......这有助于防止人们跳入答案,思考没有人为你做出的决定。 – CLaFarge 2015-06-23 21:59:39