博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫 BeautifulSoup库应用详解
阅读量:3960 次
发布时间:2019-05-24

本文共 2242 字,大约阅读时间需要 7 分钟。

Python爬虫(四)

学习Python爬虫过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。

—— BeautifulSoup库应用详解 ——

文章目录

一.安装BeautifulSoup库

可以直接使用pip安装,如果电脑上没安装pip,可以到以下网址教程中安装。

Linux:。
Windows:。
MAC OS:直接在终端输入代码:sudo easy_install pip

安装好pip后,我们就可以安装BeautifulSoup库了。

直接输入代码:pip install bs4
因为BeautifulSoup是bs4的一个部分。

二.导入BeautifulSoup库

我们首先在Python中导入BeautifulSoup库:

from bs4 import BeautifulSoup

对于新手来说,我们需要知道BeautifulSoup库有什么功能方法,我们可以dir一下:

print (dir(BeautifulSoup))

在这里插入图片描述

在这里我们可以看到BeautifulSoup库的各种方法。

import requestsfrom bs4 import BeautifulSoupr = requests.get("https://www.baidu.com")n = r.contentm = BeautifulSoup(n,"html.parser")

BeautifulSoup库最主要的功能就是从网页爬取我们需要的数据。BeautifulSoup将 html 解析为对象进行处理,全部页面转变为字典或者数组,相对于正则表达式的方式,可以大大简化处理过程。BeautifulSoup将htmll对象转成对象的过程

三.requests库的方法

import requestsfrom bs4 import BeautifulSoupr = requests.get("https://www.baidu.com")n = r.contentm = BeautifulSoup(n,"html.parser")print(m.prettify())print(m.head.title)print(m.p)for i in m.find_all("p"):    print(i)    print(type(i))st = m.find_all("p")[0]str(st)print (st)print (type(st))
  1. (参数)html.parser:避免因BeautifulSoup库和Python之间的版本不一致而引起的error报警。
  2. prettify:输出格式有缩进。
    当没有缩进的时候:
    在这里插入图片描述
    当有缩进的时候:
    在这里插入图片描述
  3. title:获取源代码中的title标签内容。可以在前面规定位置,如想要获取在head位置的title:
print(m.head.title)
  • title.name:获取titile标签名。
  • title.string:获取title内的string类型字符。
  • title.parent.string:获取titile父标签名。
  1. p:获取源代码中的p标签内容。当不唯一的时候,返回第一个。
    • p.name:获取p标签名。
    • p.string:获取p内的string类型字符。
    • p.parent.string:获取p父标签名。
  2. find_all():获取源代码中所有的某一规定标签内容。例如下面的代码,就是查找所有的p标签:
for i in m.find_all("p"):    print(i)

当然,也可以进行多关键词查找,例如:find_all(“p”,“a”,“title”)。也可以发现,这里的i类似于同一个列表的类型,但是其实并非是列表,不过可以按照列表来理解,比如我们要找源代码中第二个p标签:

print (m.find_all("p")[2])

那么,find_all这里究竟是什么类型呢,这里我们可以查一下i的类型:

在这里插入图片描述
我们可以看到,类型不是string,而是对象。如果我们想改成改为string,直接str()转换就可以了:
在这里插入图片描述

  1. 查找参数:以上方法都是只能在标签处查找,可如果要查找下面源代码中的参数href:
About Baidu

需要以下代码以及方法:

for i in m.find_all("a"):    print(i)["href"]

现在查找到a标签,然后再所有a标签中查找“href”参数,如果只查找其中某个,只需要找到特殊的标志,如id值、class值(注意:class在查找的时候是“class_”):

s=m.find_all(id="link2",class_="sister")[0].["href"]  print(s)
  1. 正则表达式:BeautifulSoup库也支持正则表达式:
import requestsfrom bs4 import BeautifulSoupimport rer = requests.get("https://www.baidu.com")n = r.contentm = BeautifulSoup(n,"html.parser")for tag in m.find_all(re.compile("^p")):	print(tag.name)

结果如下:

BeautifulSoup库
——————完整代码请点击查看。
——————更多方法详细前往查看。

转载地址:http://ybazi.baihongyu.com/

你可能感兴趣的文章
POJ3669---跳炸弹(广搜)
查看>>
POJ---1384Piggy-Bank (完全背包+装满问题)
查看>>
并查集基础知识
查看>>
POJ1182---食物链(带权并查集~技巧性超强的解法)
查看>>
POJ2492---A Bug's Life(做完食物链,再秒这个)
查看>>
POJ2063---Investment(完全背包)
查看>>
POJ1458---(最长公共子序列最基础题)
查看>>
POJ3356---(最长公共子序列)
查看>>
二叉树基础知识大全(核心理解遍历)
查看>>
03-树1 树的同构(25 分) 2017秋 数据结构 陈越、何钦铭
查看>>
04-树4 是否同一棵二叉搜索树(25 分)---陈越、何钦铭-数据结构-2017秋
查看>>
表达式求值(C实现,实现多括号,浮点数)---栈的实现以及运用。
查看>>
有序链表的合并(数据结构---单链表)
查看>>
栈实现(数据结构---数组,链表 C实现)
查看>>
POJ3903(dp,最长上升子序列,最基础题)
查看>>
POJ1836-Alignment(最长上升子序列)
查看>>
POJ 1251 Jungle Roads(最小生成树简单题)
查看>>
HDU 1690---Bus System(Floyd模板题+合理定义INF)
查看>>
POJ 2240---Arbitrage(Floyd的dp思想)
查看>>
Dijkstra算法---模板
查看>>