BeautifulSoup简单使用

#coding=utf-8
import requests
from bs4 import BeautifulSoup

resp=requests.get('https://www.baidu.com')  #请求百度首页
#resp=requests.request('get','https://www.baidu.com')   #同上
print(resp)     #打印请求结果的状态码
print(resp.content)     #打印请求到的网页源码

#标准选择器
#将网页源码构造成BeautifulSoup对象,采用解析器lxml解析html/xml
bsobj=BeautifulSoup(resp.content,'lxml')
#bsobj=BeautifulSoup(resp.content,'lxml/lxml-xml')
print(bsobj.prettify()) #实现格式化输出,可用于标签,方法<tag>.prettify()
print(bsobj.title)  #获取第一个title标签
print(bsobj.title.string)   #获取第一个title标签的文本内容
print(bsobj.head.title.string)  #嵌套选择,获取head标签下的title标签的文本内容
print(bsobj.p.a)
print(bsobj.p)  #获取第一个p标签
print(bsobj.p.string)   #获取第一个p标签的文本内容,标签内非属性字符串
print(bsobj.img.attrs)  #获取第一个img标签的所有属性
print(bsobj.p.attrs['id'])  #获取第一个p标签的id属性值
print(bsobj.p.a.contents)   #contents返回的是子节点列表,包含空格
le=bsobj.p.children     #chilren 返回的是迭代对象,子节点的迭代类型,主要用于循环遍历子节点
for i in le:
    print(i)
print(bsobj.p.parent)   #第一个p标签的父节点
print(bsobj.get_text()) #获取所有标签文本内容
#find_all(name,attrs,text),可以根据标签名,属性,文本内容查找文档
#find():返回匹配结果的一个元素
print(bsobj.find_all('p')[0])   #获取列表的第一个元素
for p in bsobj.find_all('p'):
    print(p.find_all('a'))  #获取所有p标签下的a标签
print(bsobj.find_all(attrs={'id':'cp'}))    #获取id属性值是cp的对应标签及子节点
print(bsobj.find_all(text='©2017 Baidu ')) #检索字符串
print(bsobj.find_all(id='cp'))    #获取id属性值是cp的对应标签及子节点
#其他方法
#<>.find()                        搜索且只返回一个结果,同.find_all()参数
#<>.find_parents()                在先辈节点中搜索,返回列表类型,同.find_all()参数
#<>.find_parent()                在先辈节点中返回一个结果,同.find()参数
#<>.find_next_siblings()        在后续平行节点中搜索,返回列表类型,同find_all()参数
#<>.find_next_sibling()            在后续平行节点中搜索,返回一个结果,同find()参数
#<>.find_previous_siblings()    在前续平行节点中搜索,返回列表类型,同find_all()参数
#<>.find_previous_sibling()        在前续平行节点中搜索,返回一个结果,同find()参数

#css选择器: select()
# 1. .表示class ,#表示id
# 2.其他属性  比如:[name=Tom]
# 3.标签1,标签2   找到所有的标签1和标签2
# 4.标签1 标签2    找到标签1内部的标签2
sel=BeautifulSoup(resp.content,'html.parser')   #html.parser这是python自带的解析库

print(sel.select('.mnav'))  #获取属性class值是mnav的标签
print(sel.select('.mnav[name=tj_trnews]'))  #获取属性class值是mnav且name值为tj_trnews的标签
print(sel.select('.mnav.xxx'))  #获取属性class值是mnav的标签下的class属性值是xxx的标签
print(sel.select('p a'))  #获取p标签下的所有a标签
print(sel.select('#u1 .lb'))    #获取id属性为u1的标签内部的class属性值是lb的标签
for a in sel.select('p'):
    print(a.get_text())    #get_text()可以获取文本内容

a_list=bsobj.find_all('a') #获取网页中的所有a标签对象
text='' # 创建一个空字符串
for a in a_list:
    href=a.get('href') #获取a标签对象的href属性,即这个对象指向的链接地址
    #print(href)
    text+=href+'
' #加入到字符串中,并换行
with open('baidulink.txt','w') as f: #在当前路径下,以写的方式打开一个名为'baidulink.txt',如果不存在则创建
    f.write(text) #将text里的数据写入到文本中
原文地址:https://www.cnblogs.com/cty136/p/13049666.html