小白,BeautifulSoup初步整理,后续添加
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白,BeautifulSoup初步整理,后续添加相关的知识,希望对你有一定的参考价值。
form bs4 import BeautifulSoup
要导入bs4模块
注意BeautifulSoup大小写
soup = BeautifulSoup(‘html‘,‘html.parser‘)
第一个参数html为要解析的html文档,html是字符串
解析到soup中后才可以开始使用
soup中用的比较多的方法为find_all()
用法有:
soup.find_all(‘a‘)//找出所有的a标签中的内容,返回的是一个数组,数组中的每个元素又是BeautifulSoup对象
find_all()中还可以加属性查询,如:soup.findall(‘a‘,class=‘‘),如果有多个,可以soup.findall(‘a‘,class=[‘c1‘,‘c2‘]),class_中的内容为样式,只要查找的内容中有其中一个样式就行
如:
s = ‘‘‘<a href=‘xxx‘ class=‘c1‘>aaaaaaa</a>
<a href=‘xxx‘ class=‘c2‘></a>
<a href=‘xxx‘ class=‘c1 c3‘></a>
<a href=‘xxx‘ class=‘c1 c2‘></a>‘‘‘
这里面的都可以找出来
还有一种写法:
soup.find_all(‘a‘,attrs={‘class‘:re.compile(‘‘)}),使用正则表达式,
拿到查找内容后,如果要解析标签中的内容
find_all()要循环取
假设拿到其中一个,以a标签为例
拿到的a1 = ‘<a href=‘xxx‘ class=‘c1‘>‘
拿链接:href = a1[‘href‘]
拿标签中的内容:content = a1.string
BeautifulSoup中还有find方法,用法与find_all()一样,只是该方法只取第一个符合条件的
注:如果标签不是成对的,如:<span><img src=‘xxxx‘ ></span>
此时,你用find(‘img‘)是拿不到img标签的,你需要取到他的上级成对标签span
然后在解析span标签中的内容,如
span = soup.find(‘span‘),假设拿到的是‘<span><img src=‘xxxx‘ ></span>‘
此时你需要解析他的子标签,使用children属性
span.children
此时返回的结果是list_itrator对象,要么使用for循环去取,没试过,要么使用next(list_itrator)取,可以拿到第一个子标签<img>
然后拿到src的值:src = next(list_itrator)[‘src‘]
当然如果标签是成对的,直接使用find(‘img‘)
注:
使用BeautifulSoup,以后所有返回带有标签内容的对象都是BeautifulSoup对象(个人理解)
如果要分析的内容太多,可以将需要的字符串内容截取到合适的地方,因为BeautifulSoup解析实在是太耗时间了,虽然方便
以上是关于小白,BeautifulSoup初步整理,后续添加的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫连载12-爬虫正则表示式BeautifulSoup初步
python爬虫2:按html标签提取信息和中文域名处理(BeautifulSoup用法初步)