信息标记的三种形式
- XML(eXtensible Markup Language)
- YAML(YAML Ain’t Markup Language)
- JSON(JaveScript Object Notation)
XML
使用标签标记信息的表达形式<people> <!--这是注释--> <firstname>Shan</firstname> <lastname>Ye</lastname> <address> <streetAddre>None</streetAddre> <city>Gui Lin</city> <zipcode>541004</zipcode> </address> <prof>boy</prof><prof>boring</prof> </people>
JSON
有类型键值对标记信息的表达形式
{
"firstname": "Shan",
"lastname" : "Ye",
"address":
{
"streetAddre":"None",
"city": "Gui Lin",
"zipcode": "541004"
}
}
YML
无类型键值对标记信息的表达形式
firstname: Shan
lastname: Ye
address: #缩进表达所属关系
streetAddre: None
city: Gui Lin
zipcode: 541004
prof: #this is a comment
-boy #并列关系
-boring
text: | #整块数据
ACM国际大学生程序设计竞赛(英文全称:ACM International Collegiate Programming Contest(简称ACM-ICPC或ICPC))
是由国际计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。
经过近40年的发展,ACM国际大学生程序设计竞赛已经发展成为全球最具影响力的大学生程序设计竞赛。赛事目前由IBM公司赞助。
'''
提取HTMl中的所有信息
(1)搜索到所有的<a>标签
(2)解析<a>标签格式,提取href后的链接内容
'''
import requests
from bs4 import BeautifulSoup
url = "http://python123.io/ws/demo.html"
r = requests.get(url)
demo = r.text
soup = BeautifulSoup(demo,"html.parser")
for link in soup.find_all('a'):
print(link.get("href"))
基于bs4库的信息提取的一般方法
<>.find_all()方法
<>.find_all(name,attrs,recursive,string,**kwargs)
- name: 对应标签名称的检索字符串
- attrs:对应标签属性值的检索字符串,可标注属性检索
- recursive:是否对子孙全部检索,默认为True
- string:<>…</>字符串区域的检索字符串
soup.find_all(…)等价于soup(…)
扩展方法
方法 | 说明 |
---|---|
<>.find() | 搜索且只返回一个结果,同.find_all()参数 |
<>.find_parents() | 在先辈节点中搜索,返回列表类型,同.find_all()参数 |
<>.find_parent() | 在先辈节点中返回一个结果,同.find()参数 |
<>.find_next_siblings() | 在后续平行节点中搜索,返回一个列表,同.find_all()参数 |
<>.find_next_sibling() | 在后续节点中返回一个结果,用.find()参数 |
<>find_previous_siblings() | 在前续平行结点中搜索,返回列表类型,同.find_all()参数 |
<>find.previous_sibling() | 在前续节点中返回一个节点,同.find()参数 |