BEAUTIFUL SOUP

头文件 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同时更新            阅读全文

 

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


上一篇:Python爬虫练习:爬取笑话大全


下一篇:python-爬虫