我是靠谱客的博主 风中洋葱,这篇文章主要介绍【笔记】慕课-Python网络爬虫与信息提取-BeautifulSoup库(2),现在分享给大家,希望可以做个参考。

JSON

有类型键值对
带有引号
一对一 “key”:“value”
一对多 “key”:[“value1”,“value2”]
嵌套 “key”:{“subkey”:“subvalue”}

YAML

无类型键值对,没有任何引号和括号
常用于配置文件
缩进表示所属关系
"-"表示同级并列关系
key:value
key:#Comment
-value1
-value2
key:
subkey:subvalue

方法

< tag >.find_all(name,attrs,recursive,string…)
简写形式:< tag >(…)

比如soup.find_all(…)等价于soup(…)

name可以传入一个参数’a’,也可以以列表的形式传入多个参数[‘a’,‘b’]

若name传入的参数是true,则表示所有标签名称

attrs 标签的属性,可引入正则表达式re.compile()

recursive 是否对子孙全部检索,默认true,可用于判断目标标签是处于儿子位置还是子孙位置

string <>…</>中字符串区域的检索字符串

拓展方法:略去了 _all

< tag >.find() 搜索且只返回一个结果
< tag >.find_parents() 在先辈节点中搜索,返回列表类型
< tag >.find_parent() 在先辈节点中返回一个结果,字符串类型
< tag >.find_next_sinlings() 后续平行节点
< tag >.find_next_sinling()
< tag >.find_previous_siblings() 前序平行节点
< tag >.find_previous_sibling()

实例1:中国大学排行

代码结构:
getHTMLText() 从网络上获取大学排名的网页内容
fillUnivList() 提取网页内容中信息到合适的数据结构中,在这里使用列表
printUnivList() 利用数据结构展示并输出结构

复制代码
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
33
34
35
36
37
38
39
40
41
42
43
44
import requests from bs4 import BeautifulSoup #只引用了bs4库的BeautifulSoup类 import bs4 def getHTMLText(url)try: r=requests.get(url.timeout=30) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: return "" def fillUnivList(ulist,html): soup=BeautifulSoup(html,"html.parser") #观察页面的源代码,大学信息封装在tr标签中 for tr in soup.find('tbody').children #解析tbody,在tbody中找到每一所大学对应的tr标签,在tr标签中找到td标签的信息 if isinstance(tr,bs4.element.Tag): #检测tr标签的类型,过滤掉非bs4库定义的Tag类型的信息 tds=tr('td') #等同于tr.find_all('td'),即将所有在tr标签下找到的td标签存入tds列表中 ulist.append([tds[0].string,tds[1].string,tds[2].string]) #大学排名,大学名称,得分 #整个代码的核心部分:将html中存储的html信息放入ulist这个列表中 def printUnivList(ulist,num): print("{:^10}t{:^6}t{:^10}".format("排名","学校名称","总分")) #打印表头 for i in range(num): u=ulist[i] #简化这个二维列表(列表嵌套列表) print("{:^10}t{:^6}t{:^10}".format("u[0]","u[1]","u[2]")) #格式化输出,format print("Suc"+str(num)) #num表示输出前多少个元素 def main(): unifo=[] #用于放html信息的列表 url='http://www.zuihaodaxue.cn' html=getHTMLText(url) #将url转化成html fillUnivList(unifo,html) printUnivList(uinfo,20) #列出前20所学校的信息 main()

实例优化

由于中英文混合打印(空格为英文形式)而导致中文字符对齐效果不好

方案:采用中文字符的空格填充 chr(12288)
统一字符形式

复制代码
1
2
3
4
5
6
7
8
9
def printUnivList(ulist,num): tplt="{0:^10}t{1:{3}^10}t{2:^10}" #{3}指打印学校排名这一栏需要填充时使用format函数的第三个变量也就是中文空格进行填充 print(tplt.format("排名","学校名称","总分",chr(12288))) for i in range(num): u=ulist[i] print(tplt.format("u[0]","u[1]","u[2]",chr(12288))) print("Suc"+str(num))

最后

以上就是风中洋葱最近收集整理的关于【笔记】慕课-Python网络爬虫与信息提取-BeautifulSoup库(2)的全部内容,更多相关【笔记】慕课-Python网络爬虫与信息提取-BeautifulSoup库(2)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部