第二章 爬虫基础库_requests/bs4/CSS使用 2021-09-04

news/2024/7/19 10:07:31 标签: 爬虫, python

爬虫系列总目录

本章节介绍爬虫中使用的基础库用于选择,过滤页面信息。包括requests,bs4等。
第二章 爬虫基础库-requests/bs4


第二章 基础库-requests/bs4/CSS使用

一、requests库

requests是一个很实用的Python HTTP客户端库。Python标准库中urllib可以满足我们平时的很多需求,但是urllib的API使用起来并不太友好,在urllib的基础上完成了requests库。
英文文档API:https://docs.python-requests.org/en/master/
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1.1 使用

python">import requests
# 最简单的反爬虫技巧: 添加请求头headers
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/"
                  "537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
# requests.request('get', url='https://www.baidu.com') 属于urllib3中的请求方式
response = requests.get(url='https://www.baidu.com', headers=headers)
print(response.text)  # 返回的是字符串
python">import requests

response = requests.get('https://www.baidu.com/')
print(response.content.decode())

当都没有headers 时, 前面第一种情况会出现中文乱码的情况。

  • requests默认自带的Accept-Encoding导致或者百度默认发送的就是压缩之后的网页
  • content.read()没有问题是因为requests自带的解压压缩网页的功能
  • 当收到一个响应时,Requests 会猜测响应的编码方式,用于在你调用response.text 方法时对响应进行解码。但是有可能会检测不到.
  • 推荐使用response.content.decode()

二、BeautifulSoup4 介绍

Beautiful Soup 是一个HTML/XML的解析器,主要的功能是解析和提取 HTML/XML 数据。

  1. Beautiful Soup 解析时会载入整个文档,解析全部,因此时间和内存开销都会大很多
  2. BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持 lxml 的 XML解析器。
  3. Beautiful Soup 3 目前已经停止开发,现在推荐使用Beautiful Soup 4。使用 pip 安装即可

2.1 基本使用

python">from bs4 import BeautifulSoup
with open('布局.html', 'rb') as f:
    html = f.read()
# 如果要是用lxml解析器需要安装对应的lxml框架 pip install lxml
soup = BeautifulSoup(html, 'lxml')
print(soup.prettify())

"""
解析器
lxml 推荐使用, 速度快,文档容错能力强(C编写),推荐使用
html.parser  
    优势:Python内置,执行速度适中,文档容错能力强
    劣势:Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
html5lib 
    优势:最好的容错性,已浏览器的方式解析文档,生成Html5格式的文档
    劣势:速度慢,不依赖外部扩展
"""

2.2 bs4的3种对象

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

  • Tag: 是HTML中的一个个标签,比如head、 title、p等这些HTML标签包裹的内容就是Tag。
  • NavigableString : 获取到标签内容以后,可以通过使用string获取其内部的文字。
  • BeautifulSoup: BeautifulSoup对象,即上面的soup表示的是一个文档内容。很多时候可以把它当作 Tag 对象,是一个特殊的Tag。 type 为 <class ‘str’> , print 为 [document]。

三、 CSS选择器

3.1 查找方式:标签名、类名、id、属性及其组合使用

下述select获取到的都是列表形式的结果,可以使用遍历获取其中的每一个,然后使用get_text()来获取其中的内容。

  • 属性查找, 属性需要使用[]中括号括起来,另外标签和属性是属于同一级别,中间不可加空格
python"># 如果要是用lxml解析器需要安装对应的lxml框架 pip install lxml
soup = BeautifulSoup(html, 'lxml')
# 通过标签名查找
print(soup.select('title'))
# select css选择器会将所有的满足条件的内容进行输出
print(soup.select('td'))
# 通过类名查找
print(soup.select('.box3'))
# 通过id名查找
print(soup.select('#pp'))

# 组合查找
# 查找div标签中class为box3的内容
print(soup.select('div .box3'))
# 查找div标签中id为t的内容
print(soup.select('div #t'))
# 查找div下的所有div
print(soup.select('div>div'))

# 通过属性查找
# 查找div中class类名为box3的
print(soup.select('div[class=box3]'))
# 查找img中src为abc.png的标签
print(soup.select('img[src="abc.png"]'))
# 属性查找中也可进行组合使用
print(soup.select('div img[src="abc.png"]'))

四、了解urllibs

没有headers 会无法获取数据。

python">import urllib3
# 设置headers
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/"
                  "537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
# 创建PoolManager实例生成请求
http = urllib3.PoolManager()
# 添加请求头请求
res = http.request('get', 'https://www.baidu.com', headers=headers)
print(res.data.decode())


http://www.niftyadmin.cn/n/1857668.html

相关文章

GitHub 私有库免费后,一大波羊毛党正在赶来……

GitHub 从今天起&#xff0c;面向全体个人和团队&#xff0c;免费提供不限制协作人数的私有仓库&#xff0c;所有核心功能也统统免费。不过&#xff0c;全面免费政策背后&#xff0c;也带来一些隐忧。 重磅消息&#xff01;GitHub 今天凌晨官宣&#xff0c;面向全体 GitHub 用…

那些你不知道的RK3288人脸识别方案

人脸识别测温门禁&#xff0c;配有功能丰富的测温门禁管理软件&#xff0c;自动上传测温、门禁、考勤数据&#xff0c;可联动通道闸控制进出&#xff0c;软件后台灵活设置开闸条件、测温、刷脸参数等&#xff0c;实现实时查询考勤时间、测温数据、出入记录&#xff0c;自动形成…

谷歌 CEO 发全员公开信:今年将放缓招聘速度

By 超神经内容提要&#xff1a;受新冠疫情影响&#xff0c;科技巨头谷歌也开始想办法削减成本了&#xff0c;第一个措施便是放缓招聘速度。谷歌 CEO 皮查伊已经向员工发送了公开信&#xff0c;告知这一决定。关键词&#xff1a;谷歌 公开信 放缓招聘 削减成本最近&#xff0c;在…

函数与函数式编程 2021-09-06

函数式编程一、什么是一等函数二、把函数视为对象三、高阶函数四、可调用的对象五、 支持函数式编程的包一、什么是一等函数 运行时创建作为变量传给函数作为函数的结果返回能赋值给变量或数据结构中的元素 二、把函数视为对象 doc 是函数对象众多属性中的一个。是 function…

可见的自动售货机解决方案

随着物联网和大数据时代的到来&#xff0c;人工智能的兴起&#xff0c;智能设备已环绕在人们衣食住行的各个方面。自动售货机解决方案是解决线上消费和线下体验的核心枢纽&#xff0c;加上定制化的运营模式和大数据的收集分析&#xff0c;让传统细分行业零售厂商轻松实现角色转…

上下文管理器 2021-09-06

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 上下文管理器一、上下文管理器是什么&#xff1f;二、with块三、 contextlib 模块里的函数一、上下文管理器是什么&#xff1f; 实现了 __enter__&#xff0c; __exit__ 的就…

替换3516 的国产芯片方案A70_RK1109

高科技赋能智能&#xff0c;改变通行方式。凭借非接触、无感识别、可靠、便捷高效等显著优势&#xff0c;人脸识别逐渐应用到通行市场&#xff0c;为智慧城市、智慧办公、智慧社区管理等带来更为便捷和安全的通行管理体验。 顺应市场产品迭代需求&#xff0c;RV1109芯片研发的…

iroh javascript_javascript-日常杂记 - 搭错车的小火柴

零碎的知识点……1.空值合并运算符(Nullish coalescing operator)const foo null ?? default string;中的假值有哪些&#xff1f;[0&#xff0c; &#xff0c; NaN&#xff0c; null&#xff0c; undefined]和native通信的场景 的数组索引取值是怎么进行的&#xff1f;可以将…