bs4库的简单应用
request.py
使用sublimetext会出现一些编码问题,先用pycharm吧
使用lxml解析器来解释网页
bs4 库首先将传入的字符串或文件句柄转换为 Unicode的类型,这样,我们在抓取中文信息的时候,就不会有很麻烦的编码问题了。当然,有一些生僻的编码 如:‘big5’,就需要我们手动设置编码:
soup = BeautifulSoup(markup, from_encoding=”编码方式”)
#2019-10-11 21:00:57
import requests
#导入bs4模块
from bs4 import BeautifulSoup
html = requests.get("http://www.baidu.com")
#做一个美味汤
soup = BeautifulSoup(html.text, 'lxml')
#输出结果
print(soup.prettify())
对象的种类
bs4 库将复杂的html文档转化为一个复杂的树形结构,每个节点都是Python对象 ,所有对象可以分为以下四个类型:Tag , NavigableString , BeautifulSoup , Comment
我们来逐一解释:
- Tag: 和html中的Tag基本没有区别,可以简单上手使用
- NavigableString: 被包裹在tag内的字符串
- BeautifulSoup: 表示一个文档的全部内容,大部分的时候可以吧他看做一个tag对象,支持遍历文档树和搜索文档树方法。
- Comment:这是一个特殊的NavigableSting对象,在出现在html文档中时,会以特殊的格式输出,比如注释类型。
几个结构化数据的方式
#找到文档的title
print(soup.title)
#title的name值
print(soup.title.name)
#title中的字符串String
print(soup.title.string)
#title的父亲节点的name属性
print(soup.title.parent.name)
#文档的第一个找到的段落
print(soup.p)
#找到的p的class属性值
print(soup.p['class'])
#找到a标签
print(soup.a)
#找到所有的a标签
print(soup.find_all('a'))
#找到id值等于3的标签
print(soup.find(id="link3"))
#找到所有class值为3的标签
print(soup.find_all('li', attrs={'class': '3'}))
print(soup.find_all('ul', class_='3'))
#获取所有文字内容
print(soup.get_text())
#将tag的子节点以列表方式输出
print(soup.head.contents)
#通过tag的 .children生成器,可以对tag的子节点进行循环
for child in title_tag.children:
print(child)
#找到tag下的所有的文本内容
#1.如果该tag只有一个子节点(NavigableString类型):直接使用tag.string就能找到。
#2.如果tag有很多个子、孙节点,并且每个节点里都string:我们可以用迭代的方式将其全部找出:
for string in soup.strings:
print(repr(string))