使用 python 抓取数据?

Posted

技术标签:

【中文标题】使用 python 抓取数据?【英文标题】:Web Scraping data using python? 【发布时间】:2012-03-22 16:58:39 【问题描述】:

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

我的目标是从 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+")) 来捕获标签内的文本...

任何意见都将受到高度赞赏!

【问题讨论】:

【参考方案1】:

您不妨利用所有学名(并且只有学名)都在<i/> 标签中的事实:

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

使用 BS 和 RegEx 是解析网页的两种不同方法。前者存在,所以你不必为后者操心。

您应该阅读 BS 的实际作用,似乎您低估了它的实用性。

【讨论】:

【参考方案2】:

jozek 建议的是正确的方法,但我无法让他的 sn-p 工作(但这可能是因为我没有运行 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

【讨论】:

确实 findAll 已重命名为 find_all 以符合 pep8。更多信息here.【参考方案3】:

查看网页,我不确定您要提取哪些信息。但是请注意,您可以使用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']

【讨论】:

【参考方案4】:

谢谢大家...我能够解决我在这段代码中遇到的问题:

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

【讨论】:

别忘了接受对你帮助最大的答案作为正确答案。 ...因此将 Joe 的答案标记为正确答案是合适的...这有助于防止人们跳入答案,以为没有人为您解决问题。【参考方案5】:

如果您想要长期解决方案,请尝试scrapy。它非常简单,并且为您做了很多工作。它是非常可定制和可扩展的。您将使用 xpath 提取所需的所有 URL,这更令人愉快和可靠。如果需要,scrapy 仍然允许您使用 re。

【讨论】:

以上是关于使用 python 抓取数据?的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 和 sqlite 进行网页抓取。如何有效存储抓取的数据?

请教网页里的特定数据怎么抓取?

如何用python抓取百度地图数据

使用 Scrapy 抓取 Python 数据

Python爬虫编程思想(152):使用Scrapy抓取数据,使用ItemLoader保存多条抓取的数据

Python爬虫编程思想(152):使用Scrapy抓取数据,使用ItemLoader保存多条抓取的数据