python爬虫——提取抓取内容(4)bs4基本用法

一.安装BeautifulSoup

1.需要将pip源设置为国内源

阿里源,豆瓣源,网易源等

1.1 windows:

(1) 打开文件资源管理器(windows10需要管理者权限)
(2)地址栏输入%appdata%之后进入到一个文件夹内
在这里插入图片描述
(3)在这里面新建一个文件叫做 pip
(4)在pip文件夹里新建一个文件叫 pip.ini,内容如下

[global]
timeout = 6000
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com

(6)可以在cmd中输入命令(不用切换路径,会自动安装到python中):pip install bs4也可以在python中导入beautifulsoup4
(7)bs4在使用时需要安装一个第三方库lxmlpip install lxml

1.2 linux:

(1)cd ~
(2)mkdir ~/.pip
(3)vim ~/.pip/pip.conf
(4)编辑内容和windows一样

二.转化文件

导入命令from bs4 import BeautifulSoup
使用方法:可以将一个html文档,转化为指定的对象,然后通过对象的方法或属性去查找指定的内容。

1.转化本地文件:

soup = BeautifulSoup(open('本地文件'), 'lxml') # 默认是‘r’只读模式

2.转化网络文件:

soup = BeautifulSoup('字符串类型或者字节类型', 'lxml')

3.测试

在这里插入图片描述

三.简单使用

1.根据标签查找

只能找到第一个标签

1.1案例一

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试bs4</title>
</head>
<body>
    <div class="song">
        <p>李清照</p>
        <p>王安石</p>
        <p>苏轼</p>
        <p>柳宗元</p>
        <a href="http://www.song.com/" target="_self">宋朝经济强大,子民富有!</a>
        <img src="http://www.baidu.com/image1.jpg" alt="">
    </div>
    <div class="tang">
        <ul>
            <li><a href="http://www.baidu.com">
                清明时节雨纷纷,路上行人欲断魂。
            </a> </li>
            <li><a href="http://www.163.com">
                床前明月光,疑是地上霜。
            </a> </li>
            <li><a href="http://www.126.com">
                清时明月汉时关,万里长征人未还。
            </a> </li>
            <li><a href="http://www.hao123.com">
                正是江南好风景,落花时节又逢君。
            </a> </li>
            <li><a href="http://www.sina.com">
                清明时节雨纷纷,路上行人欲断魂
            </a> </li>
        </ul>
    </div>
</body>
</html>

python文件:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')
# print(soup)
print(soup.a) # 只能找到第一个a标签

在这里插入图片描述

1.2案例二
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')
# print(soup)
print(soup.div) # 只能找到第一个div标签

在这里插入图片描述

2.获取属性

1.1案例一

方法一:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.a["href"])

在这里插入图片描述
方法二:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.a.attrs['href'])

在这里插入图片描述

1.2案例二

方法一:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.a["target"])

在这里插入图片描述
方法二:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.a.attrs['target'])

在这里插入图片描述

1.3案例三

获取第一个a标签里的所有属性

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.a.attrs)

在这里插入图片描述

3.获取内容

1.1案例一
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.a.text)

在这里插入图片描述

1.2案例二
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.a.string)

在这里插入图片描述

1.3案例三
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.a.get_text())

在这里插入图片描述

1.4案例四(如果标签里还包含其他标签,string则获取不到任何内容)

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试bs4</title>
</head>
<body>
    <div>
        大白兔奶糖
        <p>徐福记酥糖</p>
        <p>德芙巧克力</p>
        金丝猴软糖
    </div>
</body>
</html>

python文件:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.div.text)
print(soup.div.string)
print(soup.div.get_text())

在这里插入图片描述

4.find(找到符合的第一个)

1.1案例一
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.find("a"))

在这里插入图片描述

1.2案例二

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试bs4</title>
</head>
<body>
	<div class="tang">
        <ul>
            <li><a href="http://www.baidu.com" title="qing">
                清明时节雨纷纷,路上行人欲断魂。
            </a> </li>
            <li><a href="http://www.163.com" title="qin">
                床前明月光,疑是地上霜。
            </a> </li>
            <li><a href="http://www.126.com" alt="qi">
                清时明月汉时关,万里长征人未还。
            </a> </li>
            <li><a href="http://www.hao123.com">
                正是江南好风景,落花时节又逢君。
            </a> </li>
            <li><a href="http://www.sina.com">
                清明时节雨纷纷,路上行人欲断魂
            </a> </li>
        </ul>
    </div>
</body>
</html>

python文件:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.find("a", title="qin"))

在这里插入图片描述

1.3注意事项(class的特殊查找)

在这里插入图片描述

要想使用必须要加‘_’:

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试bs4</title>
</head>
<body>
    <div class="tang">
        <ul>
            <li><a href="http://www.baidu.com" title="qing">
                清明时节雨纷纷,路上行人欲断魂。
            </a> </li>
            <li><a href="http://www.163.com" title="qin">
                床前明月光,疑是地上霜。
            </a> </li>
            <li><a href="http://www.126.com" alt="qi">
                清时明月汉时关,万里长征人未还。
            </a> </li>
            <li><a href="http://www.hao123.com" class="jun">
                正是江南好风景,落花时节又逢君。
            </a> </li>
            <li><a href="http://www.sina.com" id="hun">
                清明时节雨纷纷,路上行人欲断魂
            </a> </li>
        </ul>
    </div>
</body>
</html>

python文件:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.find("a",class_="jun"))


在这里插入图片描述

1.4案例三(都只能找到匹配的第一个内容)

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

div = soup.find("div", class_="song")
print(div.find('a', class_='jun'))


在这里插入图片描述

5.find_all

1.1案例一

python文件:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')


print(soup.find_all('a'))


在这里插入图片描述

1.2案例二

python文件:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

div = soup.find('div', class_='tang')
print(div.find_all('a'))


在这里插入图片描述

1.3案例三

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试bs4</title>
</head>
    <div class="tang">
        <ul>
            <li><a href="http://www.baidu.com" title="qing">
                清明时节雨纷纷,路上行人欲断魂。
            </a> </li>
            <li><a href="http://www.163.com" title="qin">
                床前明月光,疑是地上霜。
            </a> </li>
            <li><a href="http://www.126.com" alt="qi">
                清时明月汉时关,万里长征人未还。
            </a> </li>
            <li><a href="http://www.hao123.com" class="jun">
                正是江南好风景,落花时节又逢君。
            </a> </li>
            </a> </li>
            <li><a href="http://www.hao.com" class="jun">
                杜甫
            </a> </li></a> </li>
            <li><a href="http://www.hao1.com" class="jun">
                李白
            </a> </li></a> </li>
            <li><a href="http://www.hao12.com" class="jun">
                杜牧
            </a> </li>
            <li><b>小红</b></li>
            <li><i>小明</i></li>
            <li><a href="http://www.sina.com" id="hun">
                清明时节雨纷纷,路上行人欲断魂
            </a> </li>
        </ul>
    </div>
</body>
</html>

python文件:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

div = soup.find('div', class_='tang')
print(div.find_all(['a', 'b']))


在这里插入图片描述

1.4案例四

python文件:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.find_all('a', limit=2))

在这里插入图片描述

6.select(根据选择器选取指定内容)

1.1常用的选择器

标签选择器(a),类选择器(.dudu),id选择器(#lala),组合选择器(a, .dudu, #lala, .meme),层级选择器(div.dudu#lala.meme.xixi 表示下面好多级和 div>p>a>.lala 只能是下面一级 ),伪类选择器(不常用),属性选择器 (input[name=‘lala’])

1.2案例一(层级选择器,返回的都是列表)

python文件:

from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.select('.tang > ul > li > a'))

在这里插入图片描述

1.3案例二(层级选择器)
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.select('.tang > ul > li > a')[2])

在这里插入图片描述

1.4案例三(id选择器)
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.select('#hun'))

在这里插入图片描述

1.5案例四
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.select('#hun')[0].text)

在这里插入图片描述

1.6案例五
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

print(soup.select('#hun')[0]['href'])

在这里插入图片描述

1.7案例六(通过普通对象调用)
from bs4 import BeautifulSoup

# 生成对象
soup = BeautifulSoup(open('soup_text.html', encoding='utf8'), 'lxml')

div = soup.find('div',class_='tang')
print(div.select('.jun'))


在这里插入图片描述


版权声明:本文为weixin_44321116原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。