Python 2.7 为什么可以';我是否可以使用BeautifulSoup提取页面的副标题?
我试图提取这一页的名称和副标题(例如)。我提取名称没有问题,但副标题提取不成功。使用铬元素中的inspect元素,我确定子目文本“加拿大人口普查,1901年”嵌入如下: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
<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
withsubhead
类。实际标题是在浏览器端执行的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
。