爬虫学习笔记2requests库和beautifulsoup4库学习笔记
1.requests库
1.1 安装
win下
pip install requests
1.2 常用方法
#各种请求方式:常用的就是requests.get()和requests.post()
>>> import requests
>>> r = requests.get('https://api.github.com/events')
>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
>>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})
>>> r = requests.delete('http://httpbin.org/delete')
>>> r = requests.head('http://httpbin.org/get')
>>> r = requests.options('http://httpbin.org/get')
1.2.1 .get((url, params=None, **kwargs),常用方法
- 发送一个get请求到服务器端
- url接收一个URL地址
- parmas接收一个字典对象
- 返回一个请求对象
[廖雪峰](https://www.liaoxuefeng.com/wiki/1016959663602400/1183249464292448)
get方法对于特定类型的json可以直接获取
1.2.2 .post()
需要有个参数,字典
有关get请求和post请求的区别
1.2.3 .content()
获取二进制的数据,因为像音频,图片,视频等是二进制保存的
1.2.4 .json()
对于一些事json存储格式的,可以直接调用这个方法
1.2.5 .session()
利用session模型登陆进行先后访问
后面补充
等
2.beautifulsoup4
解析html的强大工具
beautifulsoup默认支持python的标准html解析库,但是它也支持第三方库lxml xml等
我是anaconda3 里面自带这个库
2.1 常用方法
就是看一些标签把,一般提取之前,先F12,查看下 原网页的你需要的东西都在那个标签或者那个子标签里面
.prettify() 缩进格式
.title 获取title的所有名称
.title.string 获取title所有的内容
.head 获取head标签中的内容
.div 获取div标签中的内容
.a 获取a标签中的内容
.find_all("a") 获取a标签中的所有内容
.find(id="ul") 获取id="ul"
#获取所有的a标签,并遍历打印a标签中的href的值
for item in bs.find_all("a"):
print(item.get("href"))
#获取所有的a标签,并遍历打印a标签的文本值
for item in bs.find_all("a"):
print(item.get_text())
2.2 bs4 中四大对象种类
- Tag html中的一个个标签
- NavigableString 获取标签内部的文字用.string就行
- BeautifulSoup 一个文档的内容
- Comment 一个特殊类型的NavigableString对象,其输出的内容不包括注释符号
对于Tag,有两个重要的属性,name和attrs
一般对于标签来说,其name就是标签名字
attr是可以提取标签的属性的,得到的类型是一个字典
可以修改删除属性
2.3 遍历文档树
- .contents 获取Tag的所有子节点,返回一个list,因此可以按照list的方式提取值
- .children 获取Tag的所有子节点,返回一个生成器
初步认为这俩的不同是返回对象的类型不太一样
children用的多一点嘛?
**一般获取所有的xx节点就是上一个for循环就好了
for child in bs.body.children:
print(children)
2.4 搜索文档树
2.4.1 find_all
find_all(name,attrs,recursive,text,%%kwargs)
name参数
- 字符串过滤,会查找与字符串完全匹配的内容,也就是精确查找
- 正则表达式:若是正则表达式那就通过search()来匹配内容
- 列表:与列表中的任一元素匹配的节点返回
t_list=bs.find_all(["meta","link"])
for item in t_list:
print(item)
- 方法:传入方法就根据方法来匹配
def name_is_exists(tag):
return tag.has_attr("name")
t_list=bs.find_all(name_is_exists)
for item in t_list:
print(item)
kwargs
#查询id=head的Tag
t_list=bs.find_all(id="head")
print(t_list)
#查询所有包含class的Tag(因为class在python中属于关键字,所以加上_进行区别)
```python
t_list=bs.find_all(class_=True)
for item in t_list:
print(item)
attr参数
不是所有的属性都可以用上面的方式进行搜索,比如html中的data-*属性,可以使用attr参数,定义一个字典素偶所包含特殊属性的tag:
t_list=bs.find_all(attrs={"data-foo":"values"})
for item in t_list:
print(item)
text参数
可以通过线束搜索文档中的字符串内容,与name的可选参数一样
limit参数
传入一个limit参数;哎限制返回的数量
2.4.2 find
返回符合条件的第一个Tag
2.5 css选择器
.select()
爬虫学习笔记2requests库和beautifulsoup4库学习笔记的更多相关文章
- Python:requests库、BeautifulSoup4库的基本使用(实现简单的网络爬虫)
Python:requests库.BeautifulSoup4库的基本使用(实现简单的网络爬虫) 一.requests库的基本使用 requests是python语言编写的简单易用的HTTP库,使用起 ...
- 用requests库和BeautifulSoup4库爬取新闻列表
import requests from bs4 import BeautifulSoup url='http://news.gzcc.cn/html/xiaoyuanxinwen/' res=req ...
- Python学习---xml文件的解析[beautifulsoup4模块学习]
1.1. 安装beautifulsoup4 pip install beautifulsoup4 [更多参考]https://blog.csdn.net/sunhuaqiang1/article/de ...
- python应用之爬虫实战2 请求库与解析库
知识内容: 1.requests库 2.selenium库 3.BeautifulSoup4库 4.re正则解析库 5.lxml库 参考: http://www.cnblogs.com/wupeiqi ...
- python网络爬虫学习笔记(二)BeautifulSoup库
Beautiful Soup库也称为beautiful4库.bs4库,它可用于解析HTML/XML,并将所有文件.字符串转换为'utf-8'编码.HTML/XML文档是与“标签树一一对应的.具体地说, ...
- Mudo C++网络库第六章学习笔记
muduo网络库简介 高级语言(Java, Python等)的Sockects库并没有对Sockects API提供更高层的封装, 直接用它编写程序很容易掉到陷阱中: 网络库的价值还在于能方便地处理并 ...
- ArcGIS案例学习笔记_3_2_CAD数据导入建库
ArcGIS案例学习笔记_3_2_CAD数据导入建库 计划时间:第3天下午 内容:CAD数据导入,建库和管理 目的:生成地块多边形,连接属性,管理 问题:CAD存在拓扑错误,标注位置偏移 教程:pdf ...
- Python学习笔记011_模块_标准库_第三方库的安装
容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...
- 自己在linux上编译、链接、动态库和静态库的学习笔记
在平常的项目中,我们都是使用公司要求的makefile.makedebug一类的文件,因此,在编译.链接.生成和链接动态库与静态库的时候,我们只是简单的使用一些已经设置的变量,只是简单的修改.添加一些 ...
随机推荐
- 彻底搞懂flex弹性盒模型布局
为什么要用flex 基于css3简单方便,更优雅的实现,浏览器兼容性好,传统的css实现一个div居中布局要写一堆代码,而现在几行代码就搞定了,没有理由不用flex. 兼容性: Base Browse ...
- Mybatis注解开发多表一对一,一对多
Mybatis注解开发多表一对一,一对多 一对一 示例:帐户和用户的对应关系为,多个帐户对应一个用户,在实际开发中,查询一个帐户并同时查询该账户所属的用户信息,即立即加载且在mybatis中表现为一对 ...
- Django 表关系的创建
Django 表关系的创建 我们知道,表关系分为一对多,多对多,一对一 我们以一个图书管理系统为背景,设计了下述四张表,让我们来找一找它们之间的关系 Book与Publish表 找关系:一对多 左表( ...
- 【01】HTML_day01_03-HTML常用标签
typora-copy-images-to: media 第01阶段.前端基础.HTML常用标签 学习目标 理解: 相对路径三种形式 应用 排版标签 文本格式化标签 图像标签 链接 相对路径,绝对路径 ...
- springBoot 中 logback配置文件详解
logback介绍和配置详解 logback是Java的开源框架,性能比log4j要好.是springboot自带的日志框架.该框架主要有3个模块: logback-core:核心代码块(不介绍) l ...
- MySql -- check 约束
6.CHECK 约束:用于限制列中的值的范围 在一些情况下,我们需要字段在指定范围的输入,例如:性别只能输入 '男'或者'女',余额只能大于0等条件,我们除了在程序上控制以外,我们还能使用 CHECK ...
- Android(安卓)全套开发资料视频+源码
最近看到这么一张图,我觉得对于IT界的人来说应该很有感触. 也许这意味着今年是996的元年吧,但是那又怎么样?即便它虐我们千百遍,我们还是得微笑着面对它.So,今天分享一些整理的Android开发相关 ...
- 智能家居为MCU带来巨大需求量
新一代年轻消费族群对于生活品质的需求逐渐提高,不仅小米要发展智能家居,中兴通讯也在于近日在北京揭晓智"智能家居"将成为市场主流,而智能家居的崛起也必然引爆MCU的需求量迅速攀升,众 ...
- honeywell1900扫描枪的使用说明
霍尼韦尔1900扫描枪驱动是honeywell1900扫描枪的USB驱动,就是扫描枪usb转com,如果你的系统是32位的,就直接运行Install_x86.bat,如果是64位的,就运行Instal ...
- Miller-Rabin素数检测算法 acm模板
Miller-Rabin素数检测算法 其基于以下两个定理. Fermat小定理 若n是素数,则∀a(a̸≡0(modn))\forall a(a \not\equiv 0 \pmod{n})∀a(a̸ ...