爬虫学习笔记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一类的文件,因此,在编译.链接.生成和链接动态库与静态库的时候,我们只是简单的使用一些已经设置的变量,只是简单的修改.添加一些 ...
随机推荐
- 学习MVC框架,处理分页和删除分页转跳的问题
第一次写博客,文采不好请多见谅,这里主要是写一下,自己是如何处理分页问题,我想初学者也遇到过这个问题. 分页的情况下,编辑信息有返回和编辑2个按钮,操作后都是应该返回原分页界面,使用TempData把 ...
- C# checked unchecked
static void CheckedUnCheckedDemo() { int i = int.MaxValue; try { //checked //{ // Console.WriteLine( ...
- webapi+Quartz.NET解决若干定时程序同时运行的问题
项目现状: 有若干定时程序需要自启动运行,为了简便程序部署等问题,采取这种办法把定时程序集中管理到webapi中跟随api发布 代码架构介绍: 新建一个类库,类库引用Quartz(Quartz.2.3 ...
- 解决React路由URL中hash(#)部分的显示 、browserHistory打包后浏览器刷新页面出现404的问题
摘要 在React项目中,我们需要采用它的路由库React-Router来进行页面跳转,React会根据路由URL来判断是哪个页面.常见的的URL有两种显示方式,一种是hashHistory的形式,形 ...
- BOS只读状态修改
update T_META_OBJECTTYPE set FSUPPLIERNAME ='PAEZ',FPACKAGEID =null
- 批量unzip一大堆压缩文件进行文件查询的办法.
1. 公司里面开发提交的补丁存在问题. 需要找出来 哪些文件有问题 最简单的办法, 想将一对文件 转移到一个目录里面去 然后创建一个 shell 脚本执行解压缩的操作 for i in `ls *.g ...
- EF--EntityState相互转换
EF对数据做什么样的操作,是根据EF的上下文实体状态决定,实体状态有以下5种状态,下面我们就分别看下这5种状态 数据准备,我们看到学生表里有20000名学生记录,最后1位学生的学生编号为0000020 ...
- C# 调用WCF服务的两种方法
项目简介 之前领导布置一个做单点登录的功能给我,实际上就是医院想做一个统一的平台来实现在这个统一的平台登录后不需要在His.Emr.Lis等系统一个个登录,直接可以登录到对应的系统,然后进行相应的操作 ...
- 物联网开源框架Thingsboard使用总结
Thingsboard中文社区:http://thingsboard.iotschool.com/ 参考网址:https://thingsboard.io/docs/getting-started-g ...
- \n不换行
\n在js中表示换行,<br/>在html中表示换行,所以如果在设置innerHtml值时使用 \n ,那么在页面上并不会显示换行,而在设置innerText值时使用 \n 就会显 ...