先 通 过 一 下 代 码 获 取 豆 瓣 的 首 主 页 文 档 先通过一下代码获取豆瓣的首主页文档 先通过一下代码获取豆瓣的首主页文档

import urllib.request,urllib.error
import urllib.parse
from bs4 import BeautifulSoup
url="http://www.douban.com/"
head={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"}
reponse=urllib.request.Request(url=url,headers=head)
html=urllib.request.urlopen(reponse).read().decode('utf-8')
bs=BeautifulSoup(html,"html.parser")

Ⅰ .        . c o n t e n t s ( ) 方 法 \color{Red}Ⅰ.\ \ \ \ \ \ .contents()方法 Ⅰ.      .contents()方法

这 个 方 法 返 回 某 个 节 点 下 的 所 有 子 节 点 , 构 成 一 个 列 表 这个方法返回某个节点下的所有子节点,构成一个列表 这个方法返回某个节点下的所有子节点,构成一个列表

list=bs.head.contents
print(list)


python爬虫(三、提取网页内容,文档遍历)_子节点

有 了 这 个 列 表 , 就 可 以 方 便 的 遍 历 想 要 的 内 容 有了这个列表,就可以方便的遍历想要的内容 有了这个列表,就可以方便的遍历想要的内容

Ⅱ .      . f i n d _ a l l ( ) 方 法 \color{orange}Ⅱ.\ \ \ \ .find\_all()方法 Ⅱ.    .find_all()方法

Ⅱ . 1 、 查 询 所 有 的 某 类 标 签 , 组 成 一 个 列 表 返 回 Ⅱ.1、查询所有的某类标签,组成一个列表返回 Ⅱ.1、查询所有的某类标签,组成一个列表返回

list=bs.find_all("p")
print(list)

这 是 返 回 了 所 有 p 标 签 的 列 表 这是返回了所有p标签的列表 这是返回了所有p标签的列表



Ⅱ . 2 、 使 用 正 则 表 达 式 匹 配 搜 索 Ⅱ.2、使用正则表达式匹配搜索 Ⅱ.2、使用正则表达式匹配搜索

这 里 需 要 额 外 引 入 正 则 的 库 r e 这里需要额外引入正则的库re 这里需要额外引入正则的库re

import re
list=bs.find_all(re.compile("a")) #re.compile()创造一个正则表达式
print(list)

使 用 正 则 表 达 式 匹 配 , 只 要 标 签 中 含 此 字 样 , 都 会 加 入 列 表 返 回 回 来 使用正则表达式匹配,只要标签中含此字样,都会加入列表返回回来 使用正则表达式匹配,只要标签中含此字样,都会加入列表返回回来



Ⅱ . 3 、 传 入 自 定 义 的 函 数 , 依 靠 函 数 要 求 来 搜 索 Ⅱ.3、传入自定义的函数,依靠函数要求来搜索 Ⅱ.3、传入自定义的函数,依靠函数要求来搜索

如 下 面 函 数 的 作 用 是 返 回 有 n a m e 属 性 的 标 签 如下面函数的作用是返回有name属性的标签 如下面函数的作用是返回有name属性的标签

def name_is_exits(tag):
return tag.has_attr("name") #.has_attr()检查是否有该属性

list=bs.find_all(name_is_exits)
print(list)



Ⅱ . 4 、 传 入 参 数 按 照 参 数 要 求 查 找 Ⅱ.4、传入参数按照参数要求查找 Ⅱ.4、传入参数按照参数要求查找

下 面 是 找 i d = " f t " 的 标 签 , 包 括 此 标 签 内 的 所 有 节 点 组 成 列 表 下面是找id="ft"的标签,包括此标签内的所有节点组成列表 下面是找id="ft"的标签,包括此标签内的所有节点组成列表

list=bs.find_all(id="ft")
for item in list:
print(item)

下 面 是 找 c l a s s 存 在 的 标 签 , 包 含 子 节 点 返 回 组 成 列 表 下面是找class存在的标签,包含子节点返回组成列表 下面是找class存在的标签,包含子节点返回组成列表

list=bs.find_all(class_=True)
for item in list:
print(item)



Ⅱ . 5 、 t e x t 参 数 Ⅱ.5、text参数 Ⅱ.5、text参数

传 入 t e x t 参 数 可 以 匹 配 标 签 内 的 文 本 内 容 传入text参数可以匹配标签内的文本内容 传入text参数可以匹配标签内的文本内容

list=bs.find_all(text=["豆瓣","电影"])
for item in list:
print(item)


python爬虫(三、提取网页内容,文档遍历)_正则表达式_02

当 然 , 也 可 以 给 t e x t 一 个 正 则 表 达 式 去 匹 配 当然,也可以给text一个正则表达式去匹配 当然,也可以给text一个正则表达式去匹配



Ⅱ . 6 、 l i m i t 参 数 Ⅱ.6、limit参数 Ⅱ.6、limit参数

设 置 l i m i t 来 限 制 查 找 的 数 目 设置limit来限制查找的数目 设置limit来限制查找的数目

list=bs.find_all("a",limit=3)
for item in list:
print(item)

这 样 只 会 返 回 一 个 含 3 个 a 标 签 的 列 表 这样只会返回一个含3个a标签的列表 这样只会返回一个含3个a标签的列表

Ⅲ . 选 择 器 . s e l e c t ( ) 搜 索 \color{green}Ⅲ.选择器.select()搜索 Ⅲ.选择器.select()搜索

使 用 . s e l e c t ( ) 方 法 , 搜 索 c l a s s , i d 等 等 使用.select()方法,搜索class,id等等 使用.select()方法,搜索class,id等等

list1=bs.select('.content') #获取class=content的标签
list2=bs.select('#ft') #获取id=ft的标签
list3=bs.select('div[class="content"]') #获取class="content"的div标签
list4=bs.select("head > title") #获取head下面的title标签