zoukankan      html  css  js  c++  java
  • 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里的数据写入到文本中
  • 相关阅读:
    青岛公交查询
    Windows8应用生命周期 Metro Style Apps Lifecycle
    Mac下发布Qt应用程序
    Git命令笔记本
    IOS中 自定义访问用户Location时的提示信息
    使用OpenSSL发送IOS推送通知 Apple Push Notification
    最简单的iOS MapView标记点纠偏的方法
    罗技产品序列号追溯条码扫描系统
    展厅样品条形码报价管理系统
    Denso条码采集器程序开发2编译环境的搭建
  • 原文地址:https://www.cnblogs.com/cty136/p/13049666.html
Copyright © 2011-2022 走看看