爬虫beautifulsoup库常用函数的使用

        beautufulsoup作为爬虫网页的解析库,凭借它的简单易懂得到了广泛的使用。下面以beautiful常用函数为例。

soup.title                   打印标题,包括标签和文本。
soup.title.name              打印标题的标签。
soup.title.text              打印标题的文本。
soup.p                       打印第一个p标签
soup.p.parent                打印第一个p标签的父标签内容,包括标签和文本
soup.p['class']              查找第一个p标签中键值对的值。
soup.p.get('class')          在键值对中取值用.get('?'),也可以fingAll之后再get对应的值。
soup.find(id="?")            查找第一个id为符合条件的行,返回一个字符串。如果有id,那用该或下一{'id':'?'}都行(该id为beautifulsoup内置属性)
soup.find(class_='?')        同上(该class_为beautifulsoup内置属性,与class类区分开)
soup.find(attrs={'?':'?'})   利用键值对(属性)去查
soup.find(name='?')          利用标签去查
soup.findAll(name=?1,attrs=?2)   查找所有name属性,返回一个列表。?1如img,?2如{"class":"picture"},name是该行的标签,attrs是该行的键值对。用法和#e相同

注意以上为本文列出的函数,可以当总结看,不可运行,运行会报错。下面以搜狗百科“节节草”为例,讲解每一个参数:

import requests
from bs4 import BeautifulSoup

web = 'https://baike.sogou.com/v223998.htm?fromTitle=%E8%8A%82%E8%8A%82%E8%8D%89'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.39',
           'cookie': 'ssuid=5240298496; SUV=001F4972785571B961800D5EF60C6903; wuid=AAHrKNKSOQAAAAqHQ2VeoAAAkwA=; SUID=3F605E70BE50A00A0000000061B62487; sg_client_ip=120.85.113.181; uname=sg_85db9bd2e6030faac6e3b0aa; SGINPUT_UPSCREEN=1670913632956; cuid=AAG78+VCQwAAAAqHS2VFAgIANgg=; scssuid=7153297795; ABTEST=3|1681531092|v17; SNUID=A6A99F092421DD73D34D7484249A2FE3; IPLOC=CN'}
params = {'fromTitle': '节节草'}

req = requests.get(url=web,headers=headers,params=params)
soup = BeautifulSoup(req.text,'html.parser')
print(soup)
爬虫beautifulsoup库常用函数的使用_第1张图片 图1

        这里先定义soup,方便后面查看参数的效果。该段代码也不用复制去运行,因为服务器对用户的cookie是会过期的,一旦过期,cookie是无效的,自然运行也就会报错了。如果有小伙伴不懂上面代码的意思,可以看我爬虫的文章(可能还没更新),可以扫除你的大部分障碍。如果遇到no model named xxx ",需要下载该库,win+R打开cmd,输入pip install xxx。如果还有问题,可能是环境变量没有配置好。

soup.title   获取标题,包括标签和文本。

        

图2

        可以看到,输出结果包含了标签和文本 节节草-搜狗百科。

 soup.title.name   标题的标签。

        

图3

 

         输出了标签title

soup.title.text   标题的文本。

        

图4

         这里不多说,一眼便懂。我们获取到的网页含有大量的标签和文本,我们要获取文本,要先定位到标签,那么我们如何定位标签呢?假如我们要定位到图中的

标签,并获取标签下的链接,有3种方法:

1. soup.p   获取一个p标签的内容(仅获取一个p标签,假如有多个p标签,那么只获取到第一个)

         

爬虫beautifulsoup库常用函数的使用_第2张图片 图5 图6

        获取到了第一个

标签的标签及内容,接下来获取内容,假如我们要获取图5中第一行中href=...的内容,有两种方法,首先也是需要找到它对应的标签

        (1) soup.p.a['href']   查找第一个p标签中键值对的值。

图7

                 

        (2) soup.p.a.get('class')   查找第一个p标签中键值对的值,同上。

图8

        可以看到两种方法都能获取到内容。

        假如我们想获取全部

标签,接下来演示。

2. soup.find(?)   获取一个p标签的内容(仅获取一个p标签,假如有多个p标签,那么只获取到第一个),和soup.p一样

图9

         注意,name='p'中的p为标签,假如想获取

标签,那就name='div'。其他参数:id,class_,attrs。若想要查找的内容中含有id或者class_,可以直接用它。如下图含class标签:

        

爬虫beautifulsoup库常用函数的使用_第3张图片 图10 图11

        也可用attrs进行定位(假如不含id和class时,该方法很有效)

图12

         如果你对上面的内容觉得比较乱,没关系,一般用的不多。下面查找全部标签的案例用的最多。

3. soup.findAll(id='?',class_='?',name='?',attrs={})  查找全部符合条件的行

fi = soup.findAll(name='a',class_='ed_inner_link',attrs={'target':'_blank'})
for i in fi:
    print(i)
    print('-'*70)
爬虫beautifulsoup库常用函数的使用_第4张图片 图13

        把标签中class属性为ed_inner_link,且target属性为_blank的行提取出来,也可以自行减少参数,查到更多符合的条件。注意如果不是id,name,或者class,把它们全部放入attrs字典中。注意代码中写的是class_,而不是class。因为在python中class有特殊的含义,为定义一个类。

        可以说,掌握soup.findAll(id='?',class_='?',name='?',attrs={}) 即可满足几乎所有的需求。

你可能感兴趣的:(爬虫,beautifulsoup)