python爬虫-beautifulsoup匹配

一、beautifulsoup匹配 

BeautifulSoup是Python的一个库,最主要的功能就是从网页匹配我们需要的数据。

BeautifulSoup将html解析为对象进行处理,全部页面转变为字典或者数组,相对于正则表达式的方式,可以大大简化处理过程。

安装:pip3 install beautifulsoup4

Beautifulsoup和xpath的使用结构大同小异

 1.beautifulsoup匹配步骤 

导入模块:from bs4 import BeautifulSoup

 

(1)构建beautifulsoup实例

# coding:utf-8
import requests
from bs4 import BeautifulSoup

html = '''
<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <div>
           <ul>
             <li name="suner" class="one"><a>suner</a></li>
             <li name="wjk" class="two">wjk</li>
           <li name="wang" class="three">wang</li>
           <li name="karry" class="four">karry</li>
           </ul>
        </div>
    </body>
</html>
'''
soup = BeautifulSoup(html,"lxml")

① 第一个参数是要匹配的内容
② 第二个参数是beautifulsoup要采用的模块
     # html.parser  Python内置的结构匹配方法,但是效率不如lxml所以不常用
     # lxml 使用 lxml模块
     # xml 使用 xml模块
     # html5lib  该模块可以将内容转换HTML5对象
     # 但是我们要想用以上功能就要具备对应模块,比如你用lxml就要安装lxml

(2)查找元素的值

在bs4当中有n多种匹配方法,但是最常用的是两种

▲ find 查找一次

① find查找

soup = BeautifulSoup(html,"lxml")
# 查找第一个li元素的值
li_one = soup.find("li")
print(li_one)
print(li_one.text)
print(li_one.attrs)
<li class="one" name="suner"><a>suner</a></li>
suner
{'class': ['one'], 'name': 'suner'}

② 通过属性值查找

soup = BeautifulSoup(html,"lxml")
# find 可以通过属性=值的方法进行select
# class 属性匹配要加上下划线
li = soup.find(class_="two")
print(li)
<li class="two" name="wjk">wjk</li>

③ select查找

soup = BeautifulSoup(html,"lxml")
# 在进行层级查询我们可以用select
li_one = soup.select("li a")
print(li_one)

[<a>suner</a>]

④ findall 查找所有

soup = BeautifulSoup(html,"lxml")
# 查找所有li元素的值
li_list = soup.find_all("li")
for li in li_list:
    print("----------------------")
    print(li)
    print(li.text)
    print(li.attrs)
----------------------
<li class="one" name="suner"><a>suner</a></li>
suner
{'class': ['one'], 'name': 'suner'}
----------------------
<li class="two" name="wjk">wjk</li>
wjk
{'class': ['two'], 'name': 'wjk'}
----------------------
<li class="three" name="wang">wang</li>
wang
{'class': ['three'], 'name': 'wang'}
----------------------
<li class="four" name="karry">karry</li>
karry
{'class': ['four'], 'name': 'karry'}

⑤ soup本身返回

soup = BeautifulSoup(html,"lxml")
print("--------------")
print(soup.title)
print("--------------")
print(soup.head)
print("--------------")
print(soup.li)
--------------
<title>test</title>
--------------
<head>
<title>test</title>
</head>
--------------
<li class="one" name="suner"><a>suner</a></li>

猜你喜欢

转载自blog.csdn.net/qq_39620483/article/details/84102754