ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BEAUTIFUL SOUP

2020-03-04 09:51:21  阅读:214  来源: 互联网

标签:BEAUTIFUL name xxx find SOUP html https 节点


头文件 from bs4 import Beautifulsoup

编译器(不太懂html):

有lxml和html.parser(一个用不了用另一个)

自动识别文件编码形式并转换文件内容:

from bs4 import UnicodeDammit
dammit=UnicodeDammit(res,['utf-8','gbk'])
res=dammit.unicode_markup#转换成可读文件

 

查找文档元素:

.find_all(name,attr)和正则表达式的findall很像

例:.find_all(name='none',attri='x')可以找出所以属性等于x的语句,返回列表

find(name,attr)和正则表达式的search很像(只找一个)返回是字符串

因为html文档是树形文档有头必有尾,所以查找到name后会以列表的形式返回一条语句:

但只能对bf类进行find 。

xxx.select("x[attr='y'] z") 表示查找所有属性等于y的x节点下的z节点(如果没有z则是所有节点 包括换行空格之类的 )无论找到几个返回的都是一个列表 z前面一定要有空格不然编译都过不了不要问我为什么知道如果引号嵌套则里面应该是单引号

xxx.prettify():相当于代码的自动补全,这里是尽量补全html的树形文档

xxx.parent可以获得xxx的父节点 输出也是字符串

xxx.children 可以获得xxx的所有儿子节点

xxx.desendants 可以获得所有的子孙节点 几乎不用

xxx.previous_sibling 可以获得前面一个和他同级(兄弟)的节点

xxx.next_sibling 可以获得后面一个和他同级的节点 (文本也算一个节点)

xxx.name可以获得当前字符串所属的节点的名字 输出时字符串

import re
import urllib.request
from bs4 import BeautifulSoup
from bs4 import UnicodeDammit
url='https://www.cnblogs.com/cherrypill/'
user_agent={'user_agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"}
req=urllib.request.Request(url,headers=user_agent)#装成浏览器

res=urllib.request.urlopen(req)
doc=res.read()#读取网页

dammit=UnicodeDammit(res,['gbk','utf-8'])#自动识别
res=dammit.unicde_markup #转码

#doc=doc.decode() 自动转码后就不需要这个了

soup=BeautifulSoup(doc,"html.parser")
s=soup.prettify()#相当于代码的自动补全这里是尽量补全html的树形文档

element=soup.find_all(name='a',attrs={'class','c_b_p_desc_readmore'})

print(element)#这是读取我博客首页所有可以展开阅读的链接

[<a class="c_b_p_desc_readmore" href="https://www.cnblogs.com/cherrypill/p/12382736.html">阅读全文</a>, <a c....,<a...<\a>]#太多了就不写了

 

find_all返回的列表自带一个[attrs_name]可以返回名字为name的属性,(相当于返回了一个字典)而.text函数可以返回后面的文本

for i in element:
    print(i['href'],i.text)
输出;
https://www.cnblogs.com/cherrypill/p/12382736.html 阅读全文
https://www.cnblogs.com/cherrypill/p/12378028.html 阅读全文
https://www.cnblogs.com/cherrypill/p/12374229.html 阅读全文
https://www.cnblogs.com/cherrypill/p/12367998.html 阅读全文

zhaiyao=soup.find(name='div',attrs={'class',"c_b_p_desc"})
print(zhaiyao)

<div class="c_b_p_desc">
摘要:我刚开始写这个新博客,要是能关注就在好不过了。在下方订阅,以便能看到我的新文章。 也欢迎来踩我的wordpress(还没有域名就是了):https://misaka.design.blog/ 博客园和wordpress同时更新            <a class="c_b_p_desc_readmore" href="https://www.cnblogs.com/cherrypill/p/12382736.html">阅读全文</a>
</div>

print(zhaiyao.text)

摘要:我刚开始写这个新博客,要是能关注就在好不过了。在下方订阅,以便能看到我的新文章。 也欢迎来踩我的wordpress(还没有域名就是了):https://misaka.design.blog/ 博客园和wordpress同时更新            阅读全文

 

还有些高级查找(自己写函数)就不写了(没怎么看懂代码)


标签:BEAUTIFUL,name,xxx,find,SOUP,html,https,节点
来源: https://www.cnblogs.com/cherrypill/p/12407740.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有