Python3以上-bs4解析html网页

Python3.x:bs4解析html基础用法

  • bs4 文档
    文档地址

  • 基本操作

from bs4 import BeautifulSoup
import requests
import re

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}

url = 'https://blog.csdn.net/yinlell'

def get_url(url):
    r = requests.get(url, headers=headers)
    if r.status_code == 200:
        return r.content

content = get_url(url)

soup = BeautifulSoup(content.decode('utf-8'), "html.parser")

print(soup)

# 获取第一个title
print(soup.title)

# 获取第一个title标签的内容
print(soup.title.string)

# 获取标签的父标签的标签名称 meta
print(soup.title.parent.name)

# 输出第一个p标签 

print(soup.p) # 输出第一个 p 标签的 class 属性内容 print(soup.p['class']) # 输出第一个 a 标签的 href 属性内容 print(soup.a['href']) # 获取所有a标签(属性target为_blank) print(soup.find_all('a',target='_blank')) links = soup.find_all("a") for link in links: # 获取所有的href print(link.get('href')) # 获取a标签内的内容 print(link.get_text()) # 输出第一个 a 标签的所有属性信息 print(soup.a.attrs) # 输出 id 属性等于 asideHotArticle 的标签 print(soup.find(id='asideHotArticle')) # 输出 id 属性等于 asideHotArticle 的标签的文本内容 print(soup.find(id='asideHotArticle').get_text()) # 获取所有文字内容 print(soup.get_text()) # 对soup.p的子节点进行循环输出 for child in soup.head.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 # 查找h3标签class为aside-title的所有h3标签 for tag in soup.find_all("h3", class_="aside-title"): print(tag.get_text()) # 或者 for tag in soup.find_all('h3', attrs={'class': "aside-title"}): print(tag.name) # 图片地址在img标签alt属性为'图书'地方 pic_url = soup.find('img', class_='avatar_pic') res = get_url(pic_url.get('src')) file_name =pic_url.get('src').split('/')[-1].split("_")[1] # 图片不是文本文件,以二进制格式写入,所以是html.content # open(路径+文件名,读写模式) # 读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式 with open(file_name, 'wb') as f: f.write(res) f.close()

你可能感兴趣的:(Python)