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. 如何用github搭建博客

    新建项目 创建仓库 仓库名称:一定要是你的用户名+github.io 如:用户名:zhangsan 那么仓库地址: zhangsan,github.io 打开新创建的仓库,点击settings 下拉至 ...

  2. 一文让你彻底了解大数据实时计算引擎 Flink

    前言 在上一篇文章 你公司到底需不需要引入实时计算引擎? 中我讲解了日常中常见的实时需求,然后分析了这些需求的实现方式,接着对比了实时计算和离线计算.随着这些年大数据的飞速发展,也出现了不少计算的框架 ...

  3. 定制linux镜像并自动化安装

    最近碰到个需求:要在内网环境安装centos6.5系统并搭建服务,但由于自动部署脚本里安装依赖包使用的是yum安装,而服务器无法连接外网,实施人员也不会本地yum源搭建….. 本来想法是打算把需要的依 ...

  4. 优化 Git Commit Message

    目前很多项目都是通过 Git 进行管理的,Git 每次提交代码的过程中 提交说明 commit message 是必须的.但仅仅必须是不够的,好的提交说明可以帮助我们提高项目的整体质量. 作用与优点 ...

  5. RESTful基本概念

    文章目录 01 前言 02 RESTful的来源 03 RESTful6大原则 1. C-S架构 2. 无状态 3.统一的接口 4.一致的数据格式 4.系统分层 5.可缓存 6.按需编码.可定制代码( ...

  6. jieba分词基础知识

    安装:pip install jieba 导包:import jieba 精确模式:试图将句子最精确地切开,适合文本分析(很像人类一样去分词) jieba.cut(字符串) --> 返回生成器 ...

  7. 虚拟机操作系统内设置固定IP以及克隆虚拟机

    以下为我自己整理的克隆虚拟机和设置固定IP的方法,记录一下,以防忘记: 桥接模式网络配置 1.配置ip地址等信息在/etc/sysconfig/network-scripts/ifcfg-ens33文 ...

  8. 网页文件打包成.exe可执行文件

    网页文件不止可以通过浏览器打开,也可以通过打包程序打包成.exe桌面可执行程序,这样写的网页文件就可以像桌面应用一样打开了.方法如下: 工具:NW.js.Enigma Virtual Box.资源编辑 ...

  9. vue踩坑 导出new Vue.Store首字母要大写

    控制台报错  : Uncaught TypeError: vuex__WEBPACK_IMPORTED_MODULE_6__.default.store is not a constructor 根据 ...

  10. 项目——基于httpd镜像演示Dockerfile所有的指令

    基于httpd镜像演示Dockerfile所有的指令: 第一步:创建Dockerfile工作目录 [root@localhost harbor]# mkdir /test [root@localhos ...