Python爬虫是一种通过编程自动化地获取互联网上的信息的技术。其原理可以分为以下几个步骤:
今天主要介绍一下BeautifulSoup模块
BeautifulSoup
是一个用于从HTML或XML文档中提取数据的Python库。它的主要作用是解析复杂的HTML或XML文档,并提供了一种简单的方式来浏览文档树、搜索特定的标签、提取数据等。BeautifulSoup
的设计目标是让数据提取变得容易、直观,并且具有Pythonic的风格。
安装命令
pip install bs4
我这里是安装过了,第一次安装会出现suessful
# coding=utf-8
import requests # 导入请求模块
from bs4 import BeautifulSoup #
# from bs4 import BeautifulSoup 这样导入的目的是从 bs4(Beautiful Soup 4)库中引入 BeautifulSoup 类。这样导入的好处是在代码中使用 BeautifulSoup 类时不需要每次都写出完整的模块路径,简化了代码,提高了可读性。
# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 爬取内容
res = requests.get(url, headers=heder) # 这里是去请求网页的内容
# 获取内容
content = res.text # 这里是让爬取的内容以文本的形式打开,同时保存到变量
# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取标题标签
print(soup.title)
# 如果想要直接获取标题的内容
# print(soup.title.string)
注意:因为百度需要添加请求头才能获取返回的内容,故此处定义了一个heder
请求头可以按以下方式获取
运行结果
在BeautifulSoup中,soup.tagName
的语法用于访问解析后的HTML文档中特定HTML标签的第一个出现实例。在这里,soup
是BeautifulSoup对象的引用,而tagName
是你想要访问的HTML标签的名称。
它会返回第一个你指定的html标签的内容
这里可以看到百度的第一个a标签是百度首页的
使用soup.tagName
# coding=utf-8
import requests
from bs4 import BeautifulSoup
# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 爬取内容
res = requests.get(url, headers=heder)
# 获取内容
content = res.text # 这里是让爬取的内容以文本的形式打开,同时保存到变量
# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取<a></a>标签第一次出现的地方
# print(soup.tagName)
print(soup.a)
运行结果
soup.find()
是 BeautifulSoup 中用于查找单个标签的方法。它用于按照指定的条件查找文档中的第一个匹配的标签,并返回这个标签的 BeautifulSoup 对象。
查找标签的功能与soup.tagName
是一样的,不同的是soup.find
拥有丰富的参数,所以可以通过标签的class属性,或者是id属性来查找特定的标签
相关参数
name
: 要查找的标签名称,可以是字符串、正则表达式、函数等。attrs
: 标签的属性,可以用字典形式表示。recursive
: 是否递归查找,默认为 True。string
: 标签中的文本内容。kwargs
: 其他特定标签属性的关键字参数。下面演示通过attrs查找
# coding=utf-8
import requests
from bs4 import BeautifulSoup
# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 爬取内容
res = requests.get(url, headers=heder)
# 获取内容
content = res.text # 这里是让爬取的内容以文本的形式打开,同时保存到变量
# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取<a></a>标签第一次出现的地方
print(soup.find('input', attrs={'id': 'su'}))
运行结果
该方法返回的是指定标签下面的所有内容,而且是列表的形式;传入的方式是多种多样的。
(1)传入单个标签
# coding=utf-8
import requests
from bs4 import BeautifulSoup
# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 爬取内容
res = requests.get(url, headers=heder)
# 获取内容
content = res.text # 这里是让爬取的内容以文本的形式打开,同时保存到变量
# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取所有的a标签并以列表形式返回
list_a = soup.find_all('a')
# 输出显示获取到的a标签列表
for i in list_a:
print(i)
运行结果
(2)传入多个标签
# coding=utf-8
import requests
from bs4 import BeautifulSoup
# 设置要爬取的网站
url = "https://www.baidu.com/"
heder = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 爬取内容
res = requests.get(url, headers=heder)
# 获取内容
content = res.text # 这里是让爬取的内容以文本的形式打开,同时保存到变量
# 初始化Beatifulsoup
soup = BeautifulSoup(content, 'html.parser')
# 获取所有的a标签和input标签并以列表形式返回
list_a = soup.find_all('a', 'input')
# 输出显示获取到的a标签列表
for i in list_a:
print(i)
(3)传入正则表达式
万金油表达式
# 找所有的xxx标签: 属性xxx满足对应正则表达式
soup.find_all(name='xxx',attrs={'xxx':re.compile('正则表达式')}