爬虫学习笔记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一类的文件,因此,在编译.链接.生成和链接动态库与静态库的时候,我们只是简单的使用一些已经设置的变量,只是简单的修改.添加一些 ...
随机推荐
- Rust学习--变量
0x0 每种编程语言都有变量的概念,我们可以把变量理解为最简单的存储方式,它是编码过程中是必不可少的. Rust的变量很有特色.变量不可变的特性让人想起了Erlang.以及后面的模式匹配,我觉得作者应 ...
- Android中使用Canvas和Paint绘制一个安卓机器人
场景 在Android中画笔使用Paint类,画布使用Canvas类来表示. 绘图的基本步骤 首先编写一个继承自View的自定义View类,然后重写其onDraw方法,最后把自定义的view添加到ac ...
- mysql 查询语句的执行顺序(重重点)
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- C#XML文件操作随笔
以为公司一直没有电源屏厂家协议解析为DevVars相关的软件,手写费时费力还容易出错,用了2天时间做了一个.txt协议文件筛选加并解析成xml文件的工具,总结一下用到的几个知识点 1.LINQ 是一个 ...
- Win10多用户同时登陆远程桌面
想记录一下最近解决的一些问题,发现还是博客最合适,虽然之前从来没写过,希望以后能养成这个好习惯. 家里有一台台式机装着Win10,还有一台macbook,平时遇到需要用Win系统又不想坐在书桌前时,我 ...
- Excel_b_1
1.Excel简介 数据处理软件,lotus兼容(文件,选项,高级,拉到底,lotus,) 2.Excel功能 数据存储,数据处理,数据分析,数据呈现 3.具体功能 重新认识了Excel,选项,高级选 ...
- 解决 Windows 编译 Fast R-CNN 的 bbox 和 nms 出现的错误 error: Unable to find vcvarsall.bat
在 Windows 下安装一个底层的 Python 包时(Fast R-CNN 的 bbox 和 nms),遇到 error: Unable to find vcvarsall.bat 错误,看到这个 ...
- grep 基本用法
grep usage: grep [options]... pattern [file]... 如果file缺省,会从 stdin 读取 $ grep --help -i 忽略大小写 -n 显示行号 ...
- NoSQLBooster如何MongoDB的部分文档从一个集合拷贝到另外一个集合中
假设MongoDB数据库中存有collection_A和collection_B两个集合,如下图所示: (一)先从集合collection_A中拷贝选择的文档 打开collection_A,看到目前有 ...
- 图片上传的进度条-jquery
<div style="padding: 10px;"> <div class="progress-bar" style="disp ...