2015-01-21 3 views
3
<ul> 
    <li> 
    <div class="c_logo_box"> 
    <a href="money-transfer-companies/ria-money-transfer/"><img src="http://www.compareremit.com/uploads/ria-logo11.png" style="height:57px;width:147px;" alt="RIA Money Transfer"></a> 
    <span class="rs"> <span class="txt13">&#8377;</span> 61.24</span> 
     </div> 
    </li> 
... 

Я хочу отказаться от имени от 'альта = Ria Money Transfer' и скорости от диапазона 61,24.Python выскабливание (Beautiful Soup), чтобы получить данные из этого HTML

До сих пор у меня есть этот Python код:

#!/usr/bin/python 

import requests 
import re 
from bs4 import BeautifulSoup 

r = requests.get('http://www.compareremit.com') 
data = r.text 

soup = BeautifulSoup(data) 
for rate in soup.find_all('li', re.compile('money')): 
print rate.text 

Это не дает мне ничего. Может ли кто-нибудь сказать мне, что мне не хватает? Кроме того, у меня возникли проблемы с визуализацией того элемента, который я поддерживаю в поиске в цикле поиска, не могли бы вы в целом прояснить, как узнать, что указать в качестве условия для цикла в таких случаях?

ответ

1

Ваш код логически не правильно. Вы можете сделать это несколькими способами, попробуйте этот код

#/USR/бен/питон

import requests 
import re 
from bs4 import BeautifulSoup 

r = requests.get('http://www.compareremit.com') 
data = r.text 

soup = BeautifulSoup(data) 
for rate in soup.find_all('div',{"class":"c_logo_box"}): 
    print rate.a.img['alt'] 
    print rate.span.text 
1

Существует несколько способов достижения элемента. Одним из вариантов является полагаться на a тег, href из которых содержит ria-money-transfer часть, а затем получить following span element, содержащий скорость:

import re 

from bs4 import BeautifulSoup 
import requests 

response = requests.get('http://www.compareremit.com') 
soup = BeautifulSoup(response.content) 

link = soup.find('div', class_='c_logo_box').find('a', href=re.compile(r'ria-money-transfer')) 
print(link.img.get('alt')) 

rate = link.find_next_sibling('span').text.split(' ')[-1] 
print(rate) 

Печать:

RIA Money Transfer 
61.24 
+0

Спасибо, но я получаю сообщение об ошибке: выполняющийся это! «Traceback (самый последний вызов последнего): Файл «./all_.py», строка 11, в link = soup.find ('div', class _ = 'c_logo_box'). Find ('a', href = re.compile (r'ria-money -transfer ')) AttributeError: объект «NoneType» не имеет атрибута «find» – learnerX

+0

@intellikid ok, что, если вы замените 'BeautifulSoup (response.content)' на 'BeautifulSoup (response.content,« html.parser ») '? – alecxe

+0

Нет, еще ошибка: «Traceback (последний последний звонок): Файл« delnow.py », строка 9, в link = soup.find ('div', class _ = 'c_logo_box'). Find (' a ', href = re.compile (r'ria-money-transfer')) AttributeError: объект 'NoneType' не имеет атрибута 'find' " – learnerX