通过之前的网页下载器得到一串很长的网页源码,然后使用网页解析器提取网页源码中的信息。beautifulsoup4库作为第三方插件解析同时支持html和xml。通过将网页下载器下载的html字符串解析成一个BeautifulSoup对象,根据网页源码的html标签和属性,最终从这个对象中提取出我们需要的内容。1.准备网页下载器获取的源码1#首先获取网页下载器下载的网页源码2#这里直接拿官方案例3html_doc="""4
的睡鼠的故事56
睡鼠的故事78从前当时有三个小姐妹;她们的名字是9Elsie,10Lacieand11Tillie;12他们住在一口井底。1314...15"""2.导入beautifulsoup4库并创建解析对象1#导入beautifulsoup4库完成解析2frombs4importBeautifulSoup34'''5创建BeautifulSoup对象,html_doc为要解析的字符串,html.parser为指定解析器,6另外,还有其他的解析库,比如htm5llib,lxml,每个解析库都有自己的优势7'''8beau_soup=BeautifulSoup(html_doc,'html.parser')3.结构化获取元素,属性等1'''2获取结构化元素或属性3'''4#获取title元素,即title标签5printbeau_soup.title6#睡鼠的故事78#获取第一个p元素9printbeau_soup.p10#睡鼠的故事1112#获取第一个p元素的class属性13printbeau_soup.p['class']14#[u'title']1516#获取第一个p元素下面的b元素17printbeau_soup.p.b18#睡鼠的故事1920#获取父级源码p元素的节点21printbeau_soup.p.parent22'''2324睡鼠的故事25从前有三个小姐妹;他们的名字是26Elsie,27Lacieand28Tillie;29他们住在井底。30...3132'''33#获取p元素的父节点名称34printbeau_soup.p.parent.name35#body4,获取元素,属性等通过元素搜索的方式1'''2除了通过结构化的方式获取元素外,在其他不易使用结构化的方式获取元素的情况下,3可以使用类似的搜索功能对标签、属性进行过滤等源代码4find()函数,find_all()函数可以使用多条件模式搜索源代码标签等5.6'''7'''8find_all(self,name=None,attrs={},recursive=True,text=None,9limit=None,**kwargs)10结果返回一个列表集合11'''1213#搜索所有p元素,然后返回p元素列表14printbeau_soup.find_all('p')15#搜索所有a元素,然后返回a元素列表16links=beau_soup.find_all('a')17forlinkinlinks:18print'Uncrawledlink:',link['href']1920#多条件搜索,获取p元素,且元素有class属性==title21printbeau_soup.find_all('p',class_='title')22'''23find(self,name=None,attrs={},recursive=True,text=None,24**kwargs)25结果只返回一个,如果有多个则返回第一个,相比find_all()函数少了limit参数26'''2728#通过id查找29printbeau_soup.find(id='link3')3031#多条件查找,得到p个元素和class属性==title的元素32printbeau_soup.find('p',class_='title')3334importre3536#多条件搜索,得到ea元素的href属性中包含lacie字符串的lement对象37printbeau_soup.find('a',href=re.compile(r"lacie"))5.通过样式选择器1'获取元素、属性等''2除了上面提到的使用结构化获取和元素/属性搜索的方法外,还提供了select()3函数通过css样式选择器获取元素,该函数还返回一个list4'''5printbeau_soup.select('htmlheadtitle')6#htmlheadticss选择器中的tle是指html标签下head标签下的title标签78printbeau_soup.select('#link3')9##link3样式选择器中id为link3的元素更精彩去微信公众号【蟒蛇集中营】,关注获取《python 从入门到精通全套视频》