我是靠谱客的博主 风中洋葱,最近开发中收集的这篇文章主要介绍【笔记】慕课-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() 利用数据结构展示并输出结构

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)
统一字符形式

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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部