python爬虫_BeautifulSoup库使用

BeautifulSoup

  1. 概述: BeautifulSoup是一个灵活方便的解析库,处理高效,支持多种解析器,利用它不用编写正则表达式即可方便实现网页信息的提取

解析器

解析器使用方法优势劣势
Python标准库BeautifulSoup(markup, “html.parser”)Python的内置标准库执行速度适中文档容错能力强 Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器BeautifulSoup(markup, “lxml”)速度快文档容错能力强需要安装C语言库
lxml XML 解析器BeautifulSoup(markup, “xml”速度快唯一支持XML的解析器需要安装C语言库
html5libBeautifulSoup(markup, “html5lib”)最好的容错性以浏览器的方式解析文档生成HTML5格式的文档速度慢不依赖外部扩展

BeautifulSoup方法

  1. soup.prettify() 格式化输出
  2. soup.title.sting title标签内容字符串输出
  3. soup.title.text/get_text() title标签内容字符串输出

标签选择器

  1. 选择元素

    html = """
    <html><head><title>Demo</title></head><body><div>
    <p>Hello Python</p>
    <a href="http://www.baidu.com"></a>
    </div>
    </body>
    
    </html>
    """
    
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html,'lxml')
    print(soup.title)      # 如果多个,输出第一个结果
    print(type(soup.head))
    print(soup.p)
    
    输出: 
    <title>Demo</title>
    <class 'bs4.element.Tag'>
    <p>Hello Python</p>
    
  2. 获取名称

    	from bs4 import BeautifulSoup
    	soup = BeautifulSoup(html,'lxml')
    	print(soup.title.name)   # 获取标签名
    	
    	输出:
    	title
    
  3. 获取属性

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html,'lxml')  
    print(soup.p['name'])  # 获取属性名
    
  4. 获取内容

    	from bs4 import BeautifulSoup
    	soup = BeautifulSoup(html,'lxml')
    	print(soup.p.string)     #  获取标签内容
    	print(soup.p.text)     #  获取标签内容
    
  5. 子节点和子孙节点

    	from bs4 import BeautifulSoup
    	soup = BeautifulSoup(html,'lxml')
    	print(soup.body.contents) # 用类表的形式返回子节点
    	
    	
    	from bs4 import BeautifulSoup
    	soup = BeautifulSoup(html,'lxml')
    	print(soup.body.children)
    	for i,child in enumerate(soup.body.children): # 返回索引和子节点
    	    print(i,child)
    
  6. 父节点和祖先节点

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html,'lxml')
    print(soup.span.parent)  # 获取父节点
    print(list(enumerate(soup.span.parents)))  # 获取祖先节点
    
  7. 兄弟节点

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html,'lxml')
    print(list(enumerate(soup.p.next_siblings)))  # 获取后面的兄弟节点
    print(list(enumerate(soup.previous_siblings)))  #  获取前面的兄弟节点
    

标准选择器

find_all(name,attrs,recursive,text,**kwargs) 可根据标签名,属性,内容查找文档(返回所有匹配结果)

  1. name

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html,'lxml')
    # print(soup.find_all('p'))
    # print(soup.find_all('p')[0])
    for p in soup.find_all('p'):
        print(p.find_all('span'))
        print(p.find_all('span')[0].text)
    
  2. attrs

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html,'lxml')
    print(soup.find_all(attrs={'name':'test'}))
    print(soup.find_all(class_='test'))  # class和id有特殊方法
    print(soup.find_all(id='span'))
    
  3. text

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html,'lxml')
    print(soup.find_all(text='123'))   # 只是返回匹配的内容,不返回标签
    

find(name,attrs,recursive,text,**kwargs) 可根据标签名,属性,内容查找文档(返回第一个匹配结果)

CSS选择器

select()直接传入css选择器即可

	from bs4 import BeautifulSoup
	soup = BeautifulSoup(html,'lxml')
	print(soup.select('.test.test2 .test4')) # 类
	print(soup.select('a .test3'))   # 嵌套
	print(soup.select('#span'))   #id
	print(soup.select('p[name]'))  # 属性
	print(soup.select('p[name=test]'))
	```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值