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方法的扩展: