2014-09-02 30 views
1

我想提取此頁面的名稱和副標題(例如)。我沒有任何問題提取名稱,但它是不成功的副標題。使用檢查在Chrome元素,我確定了副標題文本「加拿大人口普查,1901」嵌入如下:爲什麼我無法使用BeautifulSoup提取頁面的副標題?

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

所以我編寫我的腳本如下:

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

這是結果,不能夠定位並提取副標題:

Helen Brad 
[Finished in 2.2s] 

回答

2

您通過urllib2得到的頁面不包含divsubhead班。實際的標題是在瀏覽器端執行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()。然後使用一個循環,如「if x:」來輸出只有這樣子標題的鏈接。但是我得到這個錯誤:「AttributeError:'NoneType'對象沒有屬性'find_next_sibling'」。看起來像是因爲BeautifulSoup試圖找到它但失敗。我應該如何解決這個問題? – KubiK888 2014-09-02 19:41:44

+0

@ KubiK888你可以按照你目前使用的方法:在獲取'find_next_sibling'之前,給'Soup_FamSearch.find('dt',text ='Title')'分配一個變量並檢查它是否不是'None' ()'。 – alecxe 2014-09-02 19:42:42

+0

它的工作原理,謝謝。 – KubiK888 2014-09-02 19:59:11

相關問題