Python爬虫与信息提取(四)内容检索

本文介绍信息标记方法,包括XML、JSON和YAML,以及如何使用bs4库的find_all函数从网页中提取信息。通过实例展示了如何根据标签名、属性值和字符串进行精确检索。

1.信息标记方法

目前主要有三种:

XML:<>...</>

JSON:有类型 key:value

YAML:无类型 key:value

2.信息提取的一般方法(bs4库)

主要使用了 find_all( ) 函数

基本格式:

<>.find_all(name, attrs, recursive, string, **kwargs)

name:查询带有name的内容
attrs:对标签属性值的检索字符串,可标注属性检索
recursive:是否对子孙全部检索,默认为True
string:<>...</>中字符串区域的检索字符串

基本操作:

#爬取信息的内容检索
import requests
import re
from bs4 import BeautifulSoup
kv = {'Mozilla/5.0':'user-agent'}
url = "http://www.baidu.com"
r = requests.get(url, headers=kv)
r.encoding = r.apparent_encoding
demo = r.text
soup = BeautifulSoup(demo, "html.parser")

获取所有的标签a的信息,返回列表形式
print(soup.find_all('a'))

还可以同时查找a,b标签
print(soup.find_all(['a','title']))

如果使用find_all(True)会返回所有的标签信息
for tag in soup.find_all(True):
    print(tag.name)

如果想要获取所有以b开头的所有的标签,需要先引入正则表达式库re
for tag in soup.find_all(re.compile('b')):
    print(tag.name)

根据属性值来查找
print(soup.find_all(href="http://map.baidu.com"))

找到属性之中包含某元素的所有标签,这里查找所有的属性href中包含baidu的标签
print(soup.find_all(href=re.compile('baidu')))

不对子孙进行检索
print(soup.find_all(href=re.compile('baidu'), recursive=False))

对HTML中是否含有某一字符串进行检索
print(soup.find_all(string="百度一下,你就知道"))

使用正则表达式检索出含有某一字符串的所有内容
print(soup.find_all(string=re.compile('百度')))

find方法的扩展:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值