簡體   English   中英

使用python抓取網頁數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM