Python3.6:bs4解析html基础用法
代码:
import urllib.request from bs4 import BeautifulSoup import re url = r‘http://fund.eastmoney.com/340007.html?spm=search‘ headers = { ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36‘} req = urllib.request.Request(url=url, headers=headers) res = urllib.request.urlopen(req) html = res.read().decode(‘utf-8‘) # html字符串创建BeautifulSoup对象 soup = BeautifulSoup(html, "html.parser") #或者soup = BeautifulSoup(html, "html5lib")
#输出第一个 title 标签 print(soup.title) #输出第一个 title 标签的标签名称 print(soup.title.name) #输出第一个 title 标签的包含内容 print(soup.title.string) #输出第一个 title 标签的父标签的标签名称 print(soup.title.parent.name)
#输出第一个 p 标签 print(soup.p) #输出第一个 p 标签的 class 属性内容 print(soup.p[‘class‘]) #输出第一个 a 标签的 href 属性内容 print(soup.a[‘href‘])
#输出第一个 p 标签的所有子节点 print(soup.p.contents)
#输出第一个 a 标签 print(soup.a) #输出所有的 a 标签,以列表形式显示 print(soup.find_all(‘a‘))
#输出第一个 id 属性等于 gz_gszze 的标签 print(soup.find(id=‘gz_gszze‘)) #输出第一个 id 属性等于 gz_gszze 的标签的文本内容 print(soup.find(id=‘gz_gszze‘).get_text())
#获取所有文字内容 print(soup.get_text()) #输出第一个 a 标签的所有属性信息 print(soup.a.attrs)
#循环a标签 for link in soup.find_all(‘a‘): #获取 link 的 href 属性内容 print(link.get(‘href‘)) #对soup.p的子节点进行循环输出 for child in soup.p.children: print(child) #正则匹配,标签名字中带有sp的标签 for tag in soup.find_all(re.compile("sp")): print(tag.name)
#按照CSS类名搜索tag的功能非常实用,但标识CSS类名的关键字 class 在Python中是保留字,使用 class 做参数会导致语法错误.从Beautiful Soup的4.1.1版本开始,可以通过 class_ 参数搜索有指定CSS类名的tag #查找dl标签class为dataItem02的所有dl标签 for tag in soup.find_all("dl", class_="dataItem02"): print(tag.name) #或者 for tag in soup.find_all(‘dl‘, attrs={‘class‘: "dataItem02"}): print(tag.name)