Данные веб-скрепок с использованием 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 атрибут:

 >>> 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 

Если вы хотите долгосрочное решение, попробуйте пройти курс лечения . Это довольно просто и много работает для вас. Он очень настраиваемый и расширяемый. Вы будете извлекать все URL-адреса, которые вам нужны, используя xpath, что является более приятным и надежным. Тем не менее, вы можете использовать re, если вам нужно.