2016-04-22 3 views
1

мне нужно, чтобы захватить имя человека (Alex Key здесь) из разметки, как это:Как искать значения с BeautifulSoup

<div class="link_container"> 
<a class="follow_card" data-uuid="e47443373cfa93d5341ab809f0700b82" 
data-type="person" data-name="Alex Key" data-permalink="/person/alex-acree-2" 
data-image="" data-follower-count="0" href="/person/alex-key-2">Alex Key</a></div> 

Стараюсь код:

from django.shortcuts import render 
import time 
from bs4 import BeautifulSoup 
from selenium import webdriver 
from django.http import HttpResponse 
import os 

def impTxt(request): 
abs_path = os.path.dirname(__file__) # i.e. /path/to/dir/ 
root_dir = os.path.split(abs_path)[0] #i.e. /path/to/root_of_project/ 
imp_file_path = "files/links.txt" 
abs_imp_file_path = os.path.join(root_dir, imp_file_path) # abs_path to file 


with open(abs_imp_file_path, 'r') as inputfile: 
    imp_txt = [] 
    # print imp_txt 
    for line in inputfile: 
     imp_txt.append(str(line).strip('[]')) 
     print line 
     # print imp_txt 
    for link in imp_txt: 
     # print link 
     driver = webdriver.Chrome('/Volumes/Storage/downloads_storage/chromedriver') 
     driver.get(link) 
     driver.set_window_position(0, 0) 
     driver.set_window_size(100000, 200000) 
     driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
     time.sleep(1) 
     soup = BeautifulSoup(driver.page_source, "lxml") 
     text = soup.find('a',{'class': 'follow_card'}).getText() 
     print text 
     # content = { 
     # 'text':text, 
     # } 
     return render(request, "web/parser.html",{}) 

, но не получают ничего. Укажите способ поиска переменных внутри тега. ОБНОВЛЕНО

: добавлен полный код метода

ответ

1

Это похоже на работу с разметкой:

text = dict(soup.find('a').attrs)['data-name'] 

Но вам может понадобиться, чтобы проверить первым, если data-name присутствует в словаре, потому что в противном случае он будет TRow ошибки.

+0

"KeyError at/web/parser/ 'data-name'" – Andriy

+0

@ AndriyKravchenko, можете ли вы поделиться с нами значением 'driver.page_source'? – sc3w

+0

Страница, которую я пытаюсь проанализировать: https: //www.crunchbase.com/organization/apple/people и, похоже, защищает ее от разбора. Вот мой вывод на консоль, если я печатаю суп: https: //gist.github.com/avkpol/1c298a04e4628ec162d72fc3397ee0ef – Andriy

2

GetText() может сделать для вас:

text = soup.find('a',{'class':'follow_card'}).getText() 

И имя класса здесь follow_card

+0

Спасибо, но объект 'NoneType' не имеет атрибута 'getText' ' – Andriy

1

Укажите имя класса в soup.find() ,

>>>soup.find('a',{'class': 'follow_card'}).getText() 
u'Alex Key' 
+0

То же самое: объект' NoneType 'не имеет атрибута' getText ''. Ничто не может понять! – Andriy

+0

@AndriyKravchenko проверить имя класса. Я использовал данные Html для получения текста. – Mani

Смежные вопросы