用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - python代码库

Beautifulsoup4的用法

2019-02-18 作者:芙蓉妹妹举报

[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
'''


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。