Python爬虫——BeautifulSoup的基本使用

Python爬虫——BeautifulSoup的基本使用

  • 安装beautifulsoup4模块
pip install beautifulsoup4

1.创建BeautifulSoup对象

import bs4
import requests

url = "http://www.baidu.com"
htmlFile = requests.get(url)  # 获取网页内容
# apparent_encoding获取网页编码方式,自动识别网页编码
htmlFile.encoding = htmlFile.apparent_encoding
# 创建BeautifulSoup对象,使用lxml的方式解析HTML内容
objSoup = bs4.BeautifulSoup(htmlFile.text, 'lxml')
# print(objSoup)
print(type(objSoup))  # <class 'bs4.BeautifulSoup'>

1.2内容解析

  • BeautifulSoup对象.标签名:返回标签首次出现的内容
# objSoup.tagName 返回标签首次出现的内容
# 1.获取网页标题--<title>标签里面的内容
title = objSoup.title
print(title)  # <title>百度一下,你就知道</title>

# text属性获取标签文本内容
print(objSoup.title.text)  # 百度一下,你就知道
  • find()函数:返回HTML文件中第一次出现的标签内容。也可以用于查找某个有特定属性的标签。
# objSoup.find('tagName')
# find()函数可以查找HTML文件内第一个符合的标签内容
# 1.返回标签第一次出现的内容
first_a = objSoup.find('a')
print(first_a)
# <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
# 2.属性定位
# 查询class属性,需要使用class_
findById = objSoup.find('a', class_='mnav')
print(findById)
# <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
# 使用attrs参数
find_attrs = objSoup.find(attrs={'class': 'mnav'})
print(find_attrs)
# <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
  • find_all():查找HTML中所有符合的标签内容,返回列表。
# find_all():查找HTML中所有符合的标签内容,返回列表
# 1.传入单个指定标签
list_a = objSoup.find_all('a')    # a标签的所有内容
print(list_a)
for a in list_a:
    print(a.text)
    # 新闻
    # hao123
    # 地图
    # 视频
    # 贴吧
    # 登录
    # 更多产品
    # 关于百度
    # About Baidu
    # 使用百度前必读
    # 意见反馈
# getText()获取元素内容
for i in range(len(list_a)):
    print(list_a[i].getText)
# 2.传入多个标签
list2 = objSoup.find_all(['div', 'a'])
print(list2)
print(len(list2))
# 3.传入正则表达式
import re
list3 = objSoup.find_all(re.compile('^a'))  # 查找全部以a开头的标签
print(list3)
list4 = objSoup.find_all(re.compile('^li'))  # 查找全部以li开头的标签
print(list4)
  • select()
    select()主要是以CSS选择器(selector)的方式寻找元素。如果找到元素,则返回元素列表;否则返回空列表。
    • 标签选择器:直接指定标签名
      • objSoup.select(‘p’):寻找所有<p>标签的元素;
      • objSoup.select(‘img’):寻找所有<img>标签的元素
      • objSoup.select(‘input[name]’):寻找所有<input>标签且包含name属性的元素;
    • 类(class)选择器:.
      • objSoup.select('.name):寻找所有class属性为name的元素;
    • id选择器:#
      • objSoup.select('#name):寻找所有id属性为name的元素;
    • 层级选择器:
      • 单层:>
        • objSoup.select(‘div.list > ul > li > a’):查找所有class为list的div中的ul里的li标签里面的a标签;
      • 多层:空格
        • objSoup.select(‘p #name’):寻找所有<p>标签且id为name的元素
        • objSoup.select(‘p .name’):寻找所有class为name的<p>标签;
# select()
# 1.标签选择器:直接指定标签名
list5 = objSoup.select('p')
print(list5)
# 2.类(class)选择器:.
list6 = objSoup.select('.mnav')
print(list6)
# 3.id选择器:#
list7 = objSoup.select('#lh')
print(list7)
# [<p id="lh"> <a href="http://home.baidu.com">关于百度</a> <a href="http://ir.baidu.com">About Baidu</a> </p>]

# 层级选择器
list8 = objSoup.select('#lh a')
print(list8)
# [<a href="http://home.baidu.com">关于百度</a>, <a href="http://ir.baidu.com">About Baidu</a>]
  • 获取标签文本内容
    • text:获取标签下的全部文本内容
    • get_text():获取标签下的全部文本内容
    • string:只能获取到标签下的直系文本内容
    • get()获取标签属性:如:a.get(‘href’)
  • 获取标签属性值
    • 通过选择器获取,如:
      • objSoup.select(‘#lh a’)[0].get(‘href’)
      • objSoup.select(‘#lh a’)[0][‘href’]
    • find()函数获取:
      • objSoup.find(‘a’)[‘href’]
    • 通过find_all方法获取:
      • objSoup.find_all(‘a’)[2][‘href’]
# 获取标签文本内容
# 1.text
text = objSoup.select('#lh a')[0].text
print(text)  # 关于百度

# 2.string
str1 = objSoup.select('#lh a')[0].string
print(str1)  # 关于百度

# 3.get_text()
text2 = objSoup.select('#lh a')[0].get_text()
print(text2)  # 关于百度

# 使用get()获取标签中的属性
href = objSoup.select('#lh a')[0].get('href')
print(href)  # http://home.baidu.com

first_a = objSoup.find('a')['href']
print(first_a)  # http://news.baidu.com
list_a = objSoup.find_all('a')[2]
print(list_a['href'])  # http://map.baidu.com

参考:
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值