Beautifulsoup4的用法

5年以前  |  阅读数:261 次  |  编程语言:Python 
from urllib.request import urlopen

def get_one_page(index):
    url = 'https://maoyan.com/board/4?offset=%d' % (index * 10)
    # 另一种方式:  url = 'https://maoyan.com/board/4?offset={}/'.format(index * 10)
    # 字符串的格式化处理 {} 占位符  使用format方式格式化字符串
    response = urlopen(url)
    return response.read().decode()
html = get_one_page(0)

'''
解析HTML中的内容
    1) 使用BeautifulSoup库
    a. 安装BeautifulSoup4库
        在命令行中进入Python环境
        执行 pip install beautifulsoup4
        进入Python的交互模式 执行python命令
        import bs4  如果没有任何错误, 表明安装成功

        卸载 pip uninstall beautifulsoup4
            过程中需要输入 y
    b. 引入bs4 
    2) 使用XPath
    3) 使用pyquery

'''
from bs4 import  BeautifulSoup
'''
Beautifulsoup在解析HTML时,可以设置解析值
1)HTML parser
2) lxml
3) 解析HTML5
'''
soup = BeautifulSoup(html,'html.parser')#指定一种方法解析

#打印soup对象的内容
print(soup.prettify())


#方法一(使用.的方式):获取title标签,使用标签名获取DOM树标签节点;缺点:只能获得页面中的第一个标签
title = soup.title
print(title.get_text())
print(soup.p)



# 方法二(使用函数方式):1、find_all()  返回所以符号条件的标签
ls_p = soup.find_all('p')
print(ls_p)
#遍历打印所以标签
for p in ls_p:
    print(p)

#2、find() 只返回第一个符合条件的标签(相当于soup.p方法)
p = soup.find('p')
print(p)


#获取标签内的文本内容,
body = soup.body
print(body.string)#当一个Tag对象有多个子节点时,可以用.string方法再通过遍历获得所有子节点的内容。
print(body.get_text())#如果你仅仅想要得到文档或者标签的文本部分,它能以一个单一的一个Unicode串的形式返回文档中或者Tag对象下的所有文本。

#CSS选择器
'''
1)标签
2)ID
3)class
'''


p = soup.select('.board-content')#选用class选择
print(p)


'''
1.标签选择
2.方法选择
3.CSS选择'''
print(soup.find_all('ul',attrs={'class' : 'navbar'}))
'''
节点遍历 :
  1.直接使用属性
      contens(获取当前节点的所有直接子节点,但是字符串也会被解析成一个孤立的节点)
      children   当前节点的所有子孙节点.
  2. 方法
  find    find_all
'''


subnav = soup.select('.subnav')
print(subnav[0].contents)

for child in subnav[0].children:
    print(child)

ls_a = subnav[0].find_all('a')
for a in ls_a:
    print(a)
    print(a.get_text())
    #访问节点属性(以字典保存,则取属性)
    print(a.attrs.get('href'))#用中括号,越界会报错;用get越界返回空

'''
我们在写 CSS 时,标签名不加任何修饰,类名(class="className"引号内即为类名)前加点,id名(id="idName"引号前即为id名)前加 #,
# 在这里我们也可以利用类似的方法来筛选元素,用到的方法是 soup.select(),返回类型是 list
例:
print soup.select('title') #标签
print soup.select('.sister')  #类名
print soup.select('#link1')   #ID
'''
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例