三种信息标记形式
XML 最早的通用信息标记语言,可拓展性好,但繁琐。适合Internet上的信息交互与传递
1 2 3 4 5 6 7 8 9 <person > <firstName > Tian</firstName > <lastName > Song</lastName > <address > <streetAddr > 中关村南大街5号</streetAddr > <city > 北京市</city > <zipcode > 100081</zipcode > </address > <prof > Computer System</prof > <prof > Security</prof > </person >
JSON 信息有类型,适合程序处理(js),较XML简洁。适合应用云端和节点的信息通信,但没有注释
1 2 3 4 5 6 7 8 9 10 { “firstName”: “Tian”, “lastName”: “Song”, “address”: { “streetAddr” :“中关村南大街5号”, “city” :“北京市”, “zipcode” :“100081” }, “prof”: [ “Computer System” ,“Security” ] }
YAML 信息无类型,文本信息比例较高,可读性好。适合各类系统的配置文件,有注释易读
1 2 3 4 5 6 7 8 9 firstName: Tian lastName: Song address: streetAddr: 中关村南大街5号 city: 北京市 zipcode: 100081 prof: ‐Computer System ‐Security
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from bs4 import BeautifulSoupimport requestsurl = 'http://python123.io/ws/demo.html' try : r = requests.get(url) r.raise_for_status() soup = BeautifulSoup(r.text, 'html.parser' ) for link in soup.find_all('a' ): print(link.get('href' )) except : print("爬取失败" )
1 2 3 4 5 6 7 8 9 10 <>.find_all(name, attrs, recursive, string, **kwargs) 返回一个列表类型,存储查找的结果 name: 对标签名称的检索字符串 attrs: 对标签属性值的检索字符串,可标注属性检索 recursive: 是否对子孙全部检索,默认为True 。搜索当前节点儿子层面为False string: <>...</>中字符串区域的检索字符串 <tag>(...) 等价于 <tag>.find_all(...) soup(...) 等价于 soup.find_all(...)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import requestsimport refrom bs4 import BeautifulSoupurl = 'http://python123.io/ws/demo.html' try : r = requests.get(url) r.raise_for_status() soup = BeautifulSoup(r.text, 'html.parser' ) print("查找a标签:\n" , soup.find_all('a' )) print("查找a,b标签:\n" , soup.find_all(['a' , 'b' ])) print("显示所有标签信息:\n" , soup.find_all(True )) print("----" ) for tag in soup.find_all(True ): print(tag.name) print("----" ) for tag in soup.find_all(re.compile('b' )): print(tag.name) print("属性值检索:\n" , soup.find_all('p' , 'course' )) print("标签属性值检索:\n" , soup.find_all(id="link1" )) print("检索:\n" , soup.find_all(id="link" )) print("检索:\n" , soup.find_all(id=re.compile('link' ))) print("在儿子层面搜索,不搜索子孙全部:\n" , soup.find_all('a' , recursive=False )) print("检索:\n" , soup.find_all(string="Basic Python" )) print("检索:\n" , soup.find_all(string=re.compile('python' ))) except : print("爬取失败" )
检索方法
说明
<>.find_all()
<>.find()
搜索且只返回一个结果,同.find_all()参数
<>.find_parents()
在先辈节点中搜索,返回列表类型
<>.find_parent()
在先辈节点中返回一个结果
<>.find_next_siblings()
在后续平行节点中搜索,返回列表类型
<>.find_next_sibling()
在后续平行节点中返回一个结果
<>.find_previous_siblings()
在前序平行节点中搜索,返回列表类型
<>.find_previous_sibling()
在前序平行节点中返回一个结果