Python 2.7 为什么可以';我是否可以使用BeautifulSoup提取页面的副标题?

Python 2.7 为什么可以';我是否可以使用BeautifulSoup提取页面的副标题?,python-2.7,web-scraping,beautifulsoup,urllib2,web-mining,Python 2.7,Web Scraping,Beautifulsoup,Urllib2,Web Mining,我试图提取这一页的名称和副标题(例如)。我提取名称没有问题,但副标题提取不成功。使用铬元素中的inspect元素,我确定子目文本“加拿大人口普查,1901年”嵌入如下: <div class="person-info"> <div class="title ng-binding">Helen Brad in household of Geo Wilcock</div> <div class="subhead ng-scope ng-bin

我试图提取这一页的名称和副标题(例如)。我提取名称没有问题,但副标题提取不成功。使用铬元素中的inspect元素,我确定子目文本“加拿大人口普查,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]

您通过
urlib2
获得的页面不包含
div
with
subhead
类。实际标题是在浏览器端执行的javascript的帮助下异步构造的

您需要的数据以不同的方式呈现,以下是适合我的:

print Soup_FamSearch.find('dt', text='Title').find_next_sibling('dd').text.strip()
印刷品:

Canada Census, 1901

嗨,亚历克斯,谢谢。当你的代码行是一个有效的页面时,它可以很好地工作,但我想浏览很多页面,其中很多页面没有副标题(或无效链接)或不同的副标题。我想设置一个变量使其相等:x=Soup\u FamSearch.find('dt',text='Title')。find\u next\u sibling('dd')。text.strip()。然后使用一个循环,比如“if x:”,只输出有这样子标题的链接。但我得到了这个错误:“AttributeError:'非类型'对象没有'find_next_sibling'属性。”。看起来是因为BeautifulSoup试图找到它,但失败了。我该如何解决这个问题?@KubiK888您可以遵循您目前使用的方法:为
Soup\u FamSearch.find('dt',text='Title')
分配一个变量,并在获取
find\u next\u sibling()
之前检查它是否为
None