1

我正在尝试提取此页面的名称和副标题(例如)。我提取名称没有问题,但副标题却不成功。在 Chrome 中使用检查元素,我发现子标题文本“Canada Census, 1901”嵌入如下:

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

1 回答 1

2

您通过的页面urllib2不包含divwithsubhead类。实际标题是在浏览器端执行的 javascript 的帮助下异步构建的。

您需要的数据以不同的方式呈现,这对我有用:

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

印刷:

Canada Census, 1901
于 2014-09-02T19:05:59.783 回答