Beautiful Soup库是解析、遍历、维护“标签树”的功能库。

 url = "http://desk.zol.com.cn/"
request = requests.get(url)
html = request.content
soup = BeautifulSoup(html, "html.parser", from_encoding="utf-8")

一.解析器:
1.BeautifulSoup(markup, "html.parser")
2.BeautifulSoup(markup, "lxml")
3.BeautifulSoup(markup, "xml")
4.BeautifulSoup(markup, "html5lib")

二.Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
  Tag , NavigableString , BeautifulSoup , Comment .

1.Tag 标签:
任何存在于HTML语法中的标签都可以用soup.<tag>访问获得。                    
当HTML文档中存在多个相同<tag>对应内容时,soup.<tag>返回第一个。
例如,

soup.a  --->  返回<a>标签的内容;
      soup.a.name  -->  返回<a>标签的名字;
      soup.a.parent.name  -->  返回<a>标签上一层的标签名字;
      soup.a.parent.parent.name

soup.a.attrs  --> 返回<a>标签的所有属性;
      soup.a.attrs['class']  -->  返回<a>标签的class属性;

soup.a.string  --> 返回<a>标签中的非属性内容(也就是<>...</>中的内容); 只能获取一个!

soup.get_text()  -->  获取所有内容;获取标签下所有的文字内容!   soup.get_text(" ", strip=True)可以这样去除空白行;

soup.strings  -->  如果tag中包含多个字符串,可以使用 .strings 来循环获取;

soup.stripped_strings  -->  soup.strings输出的字符串中可能包含了很多空格或空行,使用 .stripped_strings 可以去除多余空白内容;

三.基于bs4库的HTML内容遍历方法
      soup.contents
      soup.a.contents  --> 将<a>标签所有子节点存入列表;      
      soup.a.children  -->  与contents类似,但用于循环遍历子节点;
      soup.a.descendants  -->  用于循环遍历子孙节点;
注意:BeautifulSoup 对象本身一定会包含子节点,也就是说<html>标签也是 BeautifulSoup 对象的子节点!

soup.prettify()  -->  让HTML内容更加“友好”的显示,prettify()为HTML文本<>及其内容增加更加'\n'。

四.信息提取
      soup.find_all(name,attrs,recursive,string,**kwargs)
        name:对标签名称的检索;
        attrs:对标签属性值的检索;
        recursive:是否对子孙全部检索,默认为True;
        string: <>...</>中字符串区域的检索。

例如,soup.find_all('a')
      soup.find_all(['a','b'])

注意:find_all()中可以使用正则表达式来检索特定内容!
      soup.find_all(re.compile(r'^a'))

例一:

 import requests
from bs4 import BeautifulSoup request = requests.get("http://www.163hnzk.com/index_pc.php")
html = request.content
soup = BeautifulSoup(html, "html.parser", from_encoding="utf-8")
spans = soup.find_all(name='span', attrs={'class': 'newstitle'}) hrefs = []
for href in spans:
hrefs.append(href.a.attrs['href']) for url in hrefs:
# 因为url含有特殊字符不能创建文件,所以split去掉特殊字符
with open("E:\%s" % url.split('?')[1], "wb") as f:
# 'wb'所以要用content,‘w’用text
f.write(requests.get("http://www.163hnzk.com/"+url).content)

例二:

 import requests
from bs4 import BeautifulSoup
import pandas as pd #request函数用来解析页面,获取所需内容
def request(number):
header={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'}
html = requests.get("https://hr.tencent.com/position.php?&start="+str(number), headers=header).text
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
evens = soup.find_all(name='tr', attrs='even')
odds = soup.find_all(name='tr', attrs='odd')
trs = evens+odds
for tr in trs:
dct={}
dct["职位名称"]=tr.select('td a')[0].get_text()
dct["职位类别"]=tr.select('td')[1].get_text()
dct["招聘人数"]=tr.select('td')[2].get_text()
dct["工作地点"]=tr.select('td')[3].get_text()
dct["发布时间"]=tr.select('td')[4].get_text()
dct["链接地址"]='http://hr.tencent.com/'+tr.select('td a')[0].attrs['href']
lst.append(dct) #使用pandas保存为excel文件
def read_write(lst):
with open(r'E:\zhaopin.csv', 'w', encoding='utf-8') as f:
#字典列表可作为输入数据传递以创建数据帧(DataFrame),字典键默认为列名。
datafram = pd.DataFrame(lst)
datafram.to_csv(r'E:\zhaopin.csv', index=False) if __name__=="__main__":
number = 0
#lst用来保存抓取的信息
lst=[]
while True:
#只抓取前5页的内容
if number < 50:
request(number)
number = number+10
else:
break
read_write(lst) 结果:


传送门--Beautifulsoup官方文档

BeautifulSoup模块的常用方法小结的更多相关文章

  1. 【爬虫入门手记03】爬虫解析利器beautifulSoup模块的基本应用

    [爬虫入门手记03]爬虫解析利器beautifulSoup模块的基本应用 1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.Bea ...

  2. 【网络爬虫入门03】爬虫解析利器beautifulSoup模块的基本应用

    [网络爬虫入门03]爬虫解析利器beautifulSoup模块的基本应用   1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.B ...

  3. 孤荷凌寒自学python第六十八天学习并实践beautifulsoup模块1

    孤荷凌寒自学python第六十八天学习并实践beautifulsoup模块1 (完整学习过程屏幕记录视频地址在文末) 感觉用requests获取到网页的html源代码后,更重要的工作其实是分析得到的内 ...

  4. unittest模块的常用方法:

    unittest模块的常用方法: assertEqual(a, b)     a == b assertNotEqual(a, b)     a != b assertTrue(x)     bool ...

  5. Python 爬虫三 beautifulsoup模块

    beautifulsoup模块 BeautifulSoup模块 BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查 ...

  6. requsets模块和beautifulsoup模块

    2.requests模块方法 requests是基于Python开发的HTTP库,使用Requests可以轻而易举的完成浏览器可有的任何操作. request.get() request.post() ...

  7. BeautifulSoup 模块详解

    BeautifulSoup 模块详解 BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HT ...

  8. 03 解析库之Beautifulsoup模块

    Beautifulsoup模块   一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式 ...

  9. python中BeautifulSoup模块

    BeautifulSoup模块是干嘛的? 答:通过html标签去快速匹配标签中的内容.效率相对比正则会好的多.效率跟xpath模块应该差不多. 一:解析器: BeautifulSoup(html,&q ...

随机推荐

  1. index.html

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  2. MybatisPlus3.X使用配置

    本文讲解了MyBatis-Plus在使用过程中的配置选项,其中,部分配置继承自MyBatis原生所支持的配置 基本配置 本部分配置包含了大部分用户的常用配置,其中一部分为 MyBatis 原生所支持的 ...

  3. virtual与override的使用

    在函数的声明中,当有“virtual”修饰的时候,和没有virtual有什么区别呢?最重要的一点就是调用实例的函数是在编译的时候确定还是在运行的时候确定,virtual函数是在运行的时候来确定具体调用 ...

  4. ios发送短信验证码计时器的swift实现

    转载自:http://www.jianshu.com/p/024dd2d6e6e6# Update: Xcode 8.2.1 Swift 3 先介绍一下 属性观测器(Property Observer ...

  5. CVE-2019-13272 Linux kernel 权限许可和访问控制问题漏洞

    漏洞简介: Linuxkernel是美国Linux基金会发布的开源操作系统Linux所使用的内核. Linuxkernel5.1.17之前版本中存在安全漏洞,该漏洞源于kernel/ptrace.c文 ...

  6. CSPS模拟 81

    Z哥的题,真是见题如见人啊.. T1 实际状态数没有那么多,不要被数字吓倒就是了. 另外为什么吧轮廓线给忘了啊 T3 觉得自己是正解但是被hack了? 考试的时候想到了复杂度对的的解法,但是 spfa ...

  7. ASP.NET Core 3.0 gRPC 拦截器

    目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 拦截器 一. 前言 前面两篇文章给大家介绍了使用g ...

  8. canvas画圆环%显示

    我: JS代码:  function circleProgress(id,value,average){  var canvas = document.getElementById(id);  var ...

  9. Asciinema:你的所有操作都将被录制

    如何实现类似于Jumpserver koko一样的终端录制回放功能呢?本文介绍一个神器 asciinema 是一款开源免费的终端录制工具,它可以将命令行输入输出的任何内容加上时间保存在文件中,同时还提 ...

  10. 网站搭建-windows 系统 本地 网站搭建 - IIS

    上一章有提到IIS安装,现在打开它: 点击浏览,如果没有启动的话,先点击启动. ip先选好,第一个吧,本机的(IIS自己提供了初始网页的东西). 然后可以自己去https://www.freemoba ...