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语言库
html5lib BeautifulSoup(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]'))
	```
发布了44 篇原创文章 · 获赞 1 · 访问量 392
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览