requests高阶 & BS4

文章目录

  • 1.requests高阶用法
  • 2.BeautifulSoup库使用

------requests高阶 & BS4

昨日回顾:

requests:

get(url, headers, params, proxies)

post(url, headers, data, proxies)

xpath:

/

//

nodename

nodename[@attribute="…"]

text()

@attribute


1.requests高阶用法

1.requests上传文件操作
2.会话维持: Session对象(重点)
3.设置超时时间: timeout, 请求5秒内没有返回响应, 则抛出异常
4.Prepare Request: 构建request对象, 可以放入队列中实现爬取队列调度
1.requests上传文件操作files = {'file': open('filename', 'rb')}res = requests.post(url=url, files=files)2.会话维持: Session对象from requests import Sessionsession = Session()res = session.get(url=url, headers=headers)3.设置超时时间: timeout, 请求5秒内没有返回响应, 则抛出异常res = requests.get(url=url, headers=headers, timeout=5)4.Prepare Request: 构建request对象, 可以放入队列中实现爬取队列调度from requests import Request, Sessionurl = '....'data = {'wd': 'spiderman'}headers = {'User-Agent': '...'}# 1.实话session对象session = Session()# 2.构建request对象, 传入必要参数req = Request('POST', url, data=data, headers=headers)req = Request('GET', url, params=params, headers=headers)# 3.应用prepared_request方法将request对象转化为Prepared Request对象prepared = session.prepare_request(req)# 4.利用session的send方法发送请求res = session.send(prepared)

2.BeautifulSoup库使用

# BeautifulSoup库介绍:
BeautifulSoup也是一个解析库
BS解析数据是依赖解析器的, BS支持的解析器有html.parser, lxml, xml, html5lib等, 其中lxml解析器解析速度快, 容错能力强.
BS现阶段应用的解析器多数是lxml
# BeautifulSoup 使用步骤:
from bs4 import BeautifulSoupsoup = BeautifulSoup(res.text, 'lxml')
tag = soup.select("CSS选择器表达式")   # 返回一个列表
# CSS选择器:
1.根据节点名及节点层次关系定位标签: 标签选择器  &  层级选择器
soup.select('title')
soup.select('div > ul > li')   # 单层级选择器
soup.select('div li')  # 多层级选择器2.根据节点的class属性定位标签: class选择器
soup.select('.panel')3.根据id属性定位标签: id选择器
soup.select('#item')4.嵌套选择:
ul_list = soup.select('ul')
for ul in ul_list:print(ul.select('li'))# 获取节点的文本或属性:
tag_obj.string: 获取直接子文本-->如果节点内有与直系文本平行的节点, 该方法拿到的是None
tag_obj.get_text(): 获取子孙节点的所有文本
tag_obj['attribute']: 获取节点属性
# 练习示例:
html = '''<div class="panel"><div class="panel-heading"><h4>BeautifulSoup练习</h4></div><div class="panel-body"><ul class="list" id="list-1"><li class="element">第一个li标签</li><li class="element">第二个li标签</li><li class="element">第三个li标签</li></ul><ul class="list list-small"><li class="element">one</li><li class="element">two</li></ul><li class="element">测试多层级选择器</li></div></div>
'''
from bs4 import BeautifulSoupsoup = BeautifulSoup(html, 'lxml')
# 1.根据节点名定位节点, 获取其文本
h4 = soup.select('h4')   # 标签选择器
print(h4[0].get_text())# 2.根据class属性定位节点
panel = soup.select('.panel-heading')
print(panel)# 3.根据id属性定位节点
ul = soup.select('#list-1')
print(ul)# 4.嵌套选择
ul_list = soup.select('ul')
for ul in ul_list:li = ul.select('li')print(li)# 5.单层级选择器与多层级选择器
li_list_single = soup.select(".panel-body > ul > li")
li_list_multi = soup.select(".panel-body li")

# 作业: 爬取整部三国演义销售, 写入txt文件: 'http://www.shicimingju.com/book/sanguoyanyi.html'import requests
from bs4 import BeautifulSoupurl = 'http://www.shicimingju.com/book/sanguoyanyi.html'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
res = requests.get(url=url, headers=headers)
soup = BeautifulSoup(res.text, 'lxml')
a_list = soup.select(".book-mulu ul li a")
for item in a_list:name = item.stringhref = item["href"]# print(href)full_url = 'http://www.shicimingju.com' + hrefdetail_page = requests.get(url=full_url, headers=headers).textsoup_detail = BeautifulSoup(detail_page, 'lxml')div = soup_detail.select(".chapter_content")[0]print(type(div.get_text()))with open('%s.txt' % name, 'w', encoding="utf-8") as f:f.write(div.get_text())# 默写:
会话维持:Session对象from requests import Sessionsession = Session()res = session.get(url=url, headers=headers)# BeautifulSoup 使用步骤:
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text, 'lxml')
tag = soup.select("CSS选择器表达式")   # 返回一个列表

requests高阶 BS4相关推荐

  1. 爬虫requests高阶篇详细教程

    文章目录 一.前言 二.SSL验证 三.代理设置 四.超时设置 ​ 五.身份认证 1)基本身份认证 2)摘要式身份认证 六.总结 一.前言 本篇文高阶篇,上一篇为基础篇,希望你一定要学完基础再来看高阶 ...

  2. python四大高阶函数_详谈Python高阶函数与函数装饰器(推荐)

    一.上节回顾 Python2与Python3字符编码问题,不管你是初学者还是已经对Python的项目了如指掌了,都会犯一些编码上面的错误.我在这里简单归纳Python3和Python2各自的区别. 首 ...

  3. Python自定义豆瓣电影种类,排行,点评的爬取与存储(高阶上)

    Python 2.7 IDE Pycharm 5.0.3 Firefox 47.0.1 豆瓣电影系列: - 基础抓取(限于"豆瓣高分"选项电影及评论)请看↓ Python自定义豆瓣 ...

  4. 快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

    文章目录 Google驱动的安装和selenium自动化的使用 一.Google驱动的安装 二.selenium自动化的初体验 三.selenium元素的定位操作 四.selenium页面交互方法 五 ...

  5. Nginx --高阶

    Nginx -- 高阶 Nginx高级 第一部分:扩容 1.单机垂直扩容:硬件资源增加 2.水平扩展:集群化 会话管理 Nginx高级负载均衡 使用sticky模块完成对Nginx的负载均衡 1.下载 ...

  6. python开发基础04-函数、递归、匿名函数、高阶函数、装饰器

    匿名函数 lamba lambda x,y,z=1:x+y+z 匿名就是没有名字 def func(x,y,z=1):return x+y+z匿名 lambda x,y,z=1:x+y+z #与函数有 ...

  7. 【爬虫高阶】模拟登录Github

    模拟登录Github 1. 获取账号密码 2. 请求信息详解 3. 模拟登录 1. 获取账号密码 模拟登录的网址为Github,界面如下 ① 进入界面后,右键进入检查界面,选择菜单上面的Network ...

  8. Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法

    函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...

  9. MindSpore 高阶优化器

    MindSpore 高阶优化器 MindSpore自研优化器THOR(Trace-based Hardware-driven layer-ORiented Natural Gradient Desce ...

最新文章

  1. 【 Linux 】通用的vim简单配置方法
  2. python数据库管理实例_西游之路——python全栈——学员管理实例之数据库设计
  3. flask基础(上篇)
  4. OriginPro 2021 for win 科学绘图软件最新版 中英文 完美稳定附下载安装使用教程
  5. HarmonyOS之跨设备分布式应用调试
  6. 双指针算法基本原理和实践
  7. java for循环的这种写法怎么理解:for (; ; ) {},
  8. 柯里化的前生今世(四):编译器与解释器
  9. 到底他怎么赚钱了啊?看来看去也看不出他赚钱了,看来经济头脑有限啊
  10. windows service in vs
  11. 机器学习高质量数据集大合辑
  12. mysql主键和外键的连接_MySQL的主键和外键
  13. java 仿百度文库源码_Java模拟实现百度文档在线浏览
  14. linux添加模块设备,linux采用模块方法,添加一个新的设备
  15. 曼孚科技:7种常用的数据标注工具
  16. Ubuntu 双系统安装流程
  17. 数据结构-线性链表的实现和应用
  18. 研究了那么多内容后,我们打算推荐这些公众号给你
  19. ARP报文目的MAC为什么不是广播地址?
  20. 中央C到底是C几?什么是科学音高记谱法?

热门文章

  1. NVIDIA视频编码器 ffmpeg -h encoder=h264_nvenc
  2. linux删除pdf密码
  3. vue-awesome-swiper 设置autoHeight,最后不满一页也占了一页
  4. 【SpringCloudAlibaba学习 04】整合Dubbo(实现数据消费者服务调用数据生产者服务)
  5. 一款很好用的调试JS的Eclipse插件
  6. 【Python】MD5批量修改
  7. 淘宝订单接口|订单插旗备注,淘宝开放平台最稳定的店铺订单接口
  8. 免费pdf合并在线,这几个神仙网站请收好
  9. 技术驱动创新,带来的创业机遇
  10. chrome浏览器F12 Network中Timing参数含义