2014-09-02 4 views
1

이 페이지의 이름과 부제목을 추출하려고합니다 (예 :). 나는 이름을 추출하는 데 문제가 없지만 부제목은 성공적이지 못합니다. ,BeautifulSoup를 사용하여 페이지의 부제목을 추출 할 수없는 이유는 무엇입니까?

import urllib2 
import re 
import csv 
from bs4 import BeautifulSoup 
import time 

def get_FamSearch(): 

    link = "https://example.org/pal:/MM9.1.1/KH11-999" 
    openLink = urllib2.urlopen(link) 
    Soup_FamSearch = BeautifulSoup(openLink, "html") 
    openLink.close() 

    NameParentTag = Soup_FamSearch.find("tr", class_="result-item highlight-person") 
    if NameParentTag: 
     Name = NameParentTag.find("td", class_="result-value-bold").get_text(strip=True) 
     name_decode = Name.encode("ascii", "ignore") 
     print name_decode 

    SubheadTag = Soup_FamSearch.find("div", class_="subhead ng-scope ng-binding") 
    if SubheadTag: 
     print SubheadTag.get_text(strip=True) 

get_FamSearch() 

이것은 결과입니다 다음과 같이

<div class="person-info"> 
    <div class="title ng-binding">Helen Brad in household of Geo Wilcock</div> 
    <div class="subhead ng-scope ng-binding" data-ng-if="!recordPersonCentric">Canada Census, 1901</div> 

그래서 내 스크립트를 코딩 : 크롬의 요소를 검사하여, 나는 다음과 같이 부제목 텍스트 "캐나다 인구 조사 1901"가 포함되어 있는지 확인 부제목을 찾아 추출 할 수없이 :

Helen Brad 
[Finished in 2.2s] 

답변

2

urllib2을 통해 점점 페이지가 div에 포함되어 있지 않습니다클래스. 실제 제목은 브라우저 측에서 실행되는 javascript의 도움으로 비동기 적으로 생성됩니다.

당신이 필요로하는 데이터는 여기에 나를 위해 작동 무엇을 다르게 제시된다 :

print Soup_FamSearch.find('dt', text='Title').find_next_sibling('dd').text.strip() 

인쇄 :

Canada Census, 1901 
+0

안녕 Alexce을, 감사합니다. 유효한 페이지 일 때 코드 줄이 잘 작동하지만 많은 페이지에 소제목 (또는 잘못된 링크)이 있거나 여러 개의 소제목이있는 페이지를 스캔하고 싶습니다. x = Soup_FamSearch.find ('dt', text = 'Title'). find_next_sibling ('dd'). text.strip(). 그런 다음 "x : if"와 같은 루프를 사용하여 이러한 부제목이있는 링크 만 출력하십시오. 하지만이 오류가 발생합니다 : "AttributeError : 'NoneType'개체에 'find_next_sibling'특성이 없습니다." BeautifulSoup이 그것을 찾지 만 실패하기 때문에 그 것처럼 보입니다. 어떻게 해결해야합니까? – KubiK888

+0

@ KubiK888 당신은 지금까지 사용해온 접근법을 따라갈 수 있습니다 :'Soup_FamSearch.find ('dt', text = 'Title')'에 변수를 할당하고'find_next_sibling '을 얻기 전에'None'이 아닌지 확인하십시오()'. – alecxe

+0

작동합니다. 고맙습니다. – KubiK888

관련 문제