[英]Web Scraping data using python?
我剛開始使用 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+"))
來捕獲標簽內的文本......
任何輸入將不勝感激!
您不妨利用以下事實,即所有科學名稱(並且只有科學名稱)都在<i/>
標簽中:
scientific_names = [it.text for it in soup.table.find_all('i')]
使用 BS 和 RegEx 是解析網頁的兩種不同方法。 前者存在,因此您不必為后者而煩惱。
您應該仔細閱讀 BS 的實際用途,似乎您低估了它的效用。
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
查看網頁,我不確定您要提取哪些信息。 但是,請注意,您可以使用text
屬性輕松獲取標簽中的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']
謝謝大家......我能夠解決這個代碼的問題:
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
如果你想要一個長期的解決方案,試試scrapy 。 它非常簡單,可以為您完成很多工作。 它是非常可定制和可擴展的。 您將使用 xpath 提取您需要的所有 URL,這更令人愉快和可靠。 如果需要,scrapy 仍然允許您使用 re。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.