day19 学习python爬虫——requests和bs4

一、requests使用详解

import  requests

1.发送请求

requests.get(请求地址) - 直接获取请求地址对应的数据(请求对象没有要求是浏览器的时候)

requests.get(请求地址,headers= 请求头) - 直接获取请求地址对应的数据,并且通过请求头完成浏览器伪装

例如:豆瓣网

headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}

2.获取请求结果

1)直接打印响应对象,如果状态码不是200,表示请求失败
print(response)
2)获取状态码
 print(response.status_code)  # response.status_code == 200请求成功,不是则失败
3)设置编码方式(在请求结果中乱码的时候设置,设置成网页源代码中charset的值)
response.encoding='utf-8'
4)获取响应头(可以查看服务器信息和返回的数据相关信息)
print(response.headers)
5)获取请求结果(获取从服务器中返回的数据)
a.方式1. 响应对象.text - 以字符串的方式获取数据(请求对象是网页)
 print(response.text)
b.方式2:响应对象.content - 以二进制的方式获取数据(请求对象是二进制数据,比如:下载图片、音频等)
 print(response.content)
c.方式3:响应对象.json() - 对请求结果进行json解析返回结果(请求对象是json接口)
print(response.json())

二、请求的三种方法

1.爬网页数据 - 请求地址是网址

import requests
from  re import findall
response =  requests.get('https://cd.zu.ke.com/zufang')
if response.status_code == 200:#通过text获取请求结果,然后再敬一部解析print(response.text)

2.下载图片、视频、、音频 - 请求地址是图片、音频、视频地址

1)对图片地址萨松请求
response = requests.get('https://img1.baidu.com/it/u=4219797949,2706556049&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=833')
2)在请求成功的时候将得到的图片数据写入到文件中
if response.status_code == 200:f = open('files/11.jpeg','wb')f.write(response.content)f.close()

练习:下载贝克租房首页所有的房屋的效果图片

1.直接对网页发送请求获取所有图片地址
response = requests.get('https://cd.zu.ke.com/zufang')
if response.status_code == 200:all_img = findall(r'data-src="(.+)"\s+class="lazyloaded">', response.text)print(all_img)2.遍历得到每张图片地址count =0for x in all_img:img_response = response.get(x)f=open(f'files/{count}.jpeg','wb')count +=1f.write(img_response.content)f.close()

三、json数据

1.json

json是一种通用的数据格式**(转换成通用的数据格式供不同的客户端使用)**(为了让不同编程语言的程序之间可以进行有效的数据交流而存在的)

json数据格式:一个json有且只有一个数据,并且唯一的这个数是json支持的数据类型的数据

json支持的数据类型:

1)数字 - 像数字一样,1,-0.2,3.3,4e2等…
2)字符串 - 必须使用双引号引起来:“abc”、“你好”、“abc\n123”、“\u4e00”
3)布尔 - true和false
4)数组 - 就是python的列表[10,20,true,“abc”]
5)字典 - json中字典的键必须是字符串:{“name”: “小明”, “age”: 18}
6)空值 - null

2.json和python的相互转换

from json import  loads,dumps
1)json 转python - loads
loads(json格式字符串) - 将json数据转换成对应的python数据
#"abc"
result = loads('"abc"')
print(result,type(result))result =loads('[10,"你好",true,null]')
print(result) #[10, '你好', True, None]
1)python转json - dumps

json支持的数据类型再加上元组的都可以转换成json

dumps(python数据) - 将python数据转换成对应的json格式字符串
dumps('abc') #'"abc"'
dumps(10) #'10'
dumps([10,'abc',None,False]) #'[10,"abc",null,false]'
dumps({'a':10,10:20,'c':'d'}) #  '{"a": 10, "10": 20, "c": "d"}'

四、bs4网页数据解析

安装xlml和beautifulsoup4虚拟环境第三方库

import requests

使用bs4安装第三方库的时候安装的是:beautifulsoup4

from bs4 import BeautifulSoup

1. 基于网页源代码创建BeautifulSoup对象

BeautifulSoup(网页源代码, 'lxml')
html = open('data.html').read()
soup = BeautifulSoup(html, 'lxml')

2. 基于css选择器解析数据:获取标签 -> 获取标签内容和标签属性

1)获取标签

BeautifulSoup对象.select(css选择器) - 获取整个网页中css选择器选中的所有标签;返回一个列表,列表中元素是标签对象

BeautifulSoup对象.select_one(css选择器) - 获取整个网页中css选择器选中的第一个标签;返回一个标签对象

标签对象.select(css选择器) - 获****取指定标签中css选择器选中的所有标签

标签对象.select_one(css选择器) - 获取指定标签中css选择器选中的第一个标签

result = soup.select('p')
print(result)result = soup.select('.c1')
print(result)result = soup.select('#p1')
print(result)result = soup.select('div>p')
print(result)result = soup.select('div p')
print(result)result = soup.select_one('p')
print(result)
div = soup.select_one('div')
result = div.select('p')
print(result)span = soup.select_one('#s1')
result = span.select('p')
print(result)
2)获取标签内容和标签属性
标签对象.text - 获取标签内容
标签对象.attrs[属性名] - 获取指定标签中指定属性的值
a = soup.select_one('div>div>a')
print(a, a.text)img = soup.select_one('img')
print(img, img.attrs['alt'], img.attrs['src'])

案例:bs4解析豆瓣电影第一页电影名称、评论、电影评分

import requests
from bs4 import BeautifulSoup
  1. 获取网页数据
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}
response = requests.get('https://movie.douban.com/top250', headers=headers)
html = response.text
  1. 解析数据
soup = BeautifulSoup(html, 'lxml')div_list = soup.select('.grid_view>li>.item')for div in div_list:title = div.select_one('.title').textcomment = div.select('.star>span')[-1].textscore = div.select_one('.star>.rating_num').textprint(title, comment, score)

day19 学习python爬虫——requests和bs4相关推荐

  1. python爬虫requests和bs4引入

    python爬虫requests和bs4引入 python:网络爬虫:利用优秀的第三方库,如requests,beautifulsoup 1.前提基础: Python3安装&Python3环境 ...

  2. python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程

    python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程 前言 一丶整体思路 二丶遇到的问题 三丶分析URL 四丶解析页面 五丶写入文件 六丶完整代码 七丶最后 前言 大家好我是墨绿 头顶总 ...

  3. 如何自学python爬虫-小白如何快速学习Python爬虫?

    原标题:小白如何快速学习Python爬虫? 很多同学想学习 爬虫 ,对于小白来说,爬虫可能是一件非常复杂.技术门槛很高的事情.而且爬虫是入门 Python 最好的方式,没有之一. 我们可以通过爬虫获取 ...

  4. 如何自学python爬虫-怎样入门学习Python爬虫?

    怎样入门学习Python爬虫? 1.掌握Python编程能基础 想要学习爬虫,首先要充分掌握Python编程技术相关的基础知识.爬虫其实就是遵循一定的规则获取数据的过程,所以在学习Python知识的过 ...

  5. python爬取知乎话题广场_学习python爬虫---爬虫实践:爬取B站排行榜2(爬取全部分类排行榜、利用pygal库作图)...

    前面我们爬取了B站上全站的排行榜,详细见:魏勇:学习python爬虫---爬虫实践:爬取B站排行榜​zhuanlan.zhihu.com 一.爬取全部分类排行榜 我们观察一下B站排行榜,那里还有番剧排 ...

  6. 学习 Python 爬虫,手把手通过 Python 入门爬取网页信息

    Python 爬虫是什么? 我们在网络上收集资料的过程其实就称之为爬虫(web scraping).复制粘贴歌词.摘抄文本或数据都可以算作爬虫的一部分,但网络编程背景下的爬虫,更强调自动化,通过 Py ...

  7. 已解决(Python爬虫requests库报错 请求异常SSL错误,证书认证失败问题)requests.exceptions.SSLError: HTTPSConnectionPool

    成功解决(Python爬虫requests库报错 请求异常,SSL错误,证书认证失败问题)requests.exceptions.SSLError: HTTPSConnectionPool(host= ...

  8. 已解决(Python爬虫requests报错)requests.exceptions.ProxyError: HTTPSConnectionPool

    成功解决(Python爬虫requests报错):requests.exceptions.ProxyError: HTTPSConnectionPool 文章目录 报错信息 报错翻译 报错原因 解决方 ...

  9. 学python需要学数据库吗-学习Python爬虫前,你必须知道的一些工具!

    原标题:学习Python爬虫前,你必须知道的一些工具! 许多小伙伴在学习了一段时间的Python后,开始上手爬虫项目了,作为一个总算掌握了基础,开始向上进阶的Python小白,在做爬虫的时候肯定会遇到 ...

最新文章

  1. 了解CSS/CSS3原生变量var (转)
  2. DPDK报文转发(四)
  3. 如何通过StackStorm自动支持2万多台服务器
  4. es 根据_id查询_京东把 Elasticsearch 用得真牛逼!日均5亿订单查询完美解决
  5. webpack打包样式资源_使用loader去打包css文件_打包less文件---webpack工作笔记004
  6. 【学习笔记】莫队算法
  7. Camera HW组成(二十六)
  8. python怎么使用预训练的模型_Tensorflow加载Vgg预训练模型操作
  9. 服务器打微软补丁后无法启动,关于打了最新微软补丁后,针式打印机突然不好打印的处理方法。...
  10. android 获取url 参数值
  11. c#语言程序翻译软件,C#使用百度翻译API
  12. Oracle Redo log 状态及工作原理解析
  13. 一键生成App图标所有尺寸的三个酷站分享
  14. ROS实验笔记之——JCV-450无人机初入门
  15. CentOS更改语言两种方式
  16. matlab 2015 积分,Matlab中如何求解积分?
  17. 网页前端之字幕滚动实现
  18. 【实战操作】使用FFmpeg将一个视频文件中音频合成到另一个视频中 只需三秒
  19. NX二次开发-获得图纸视图的名字UF_OBJ_ask_name
  20. 前端学习笔记--AJAX的应用(三)form表单改为AJAX提交

热门文章

  1. 计算机要大牛 掌握的方法【上】写的很全面,收藏
  2. (三十 :2021.01.11)MICCAI 2018 追踪之论文纲要(上)
  3. 关于Solidworks提示VBE6EXT.OLB不能加载
  4. 第十九节:依次逐个点亮LED之后,再依次逐个熄灭LED的跑马灯程序。
  5. 解决IE浏览器,img的src加载图片问题
  6. ​度小满金融大数据架构实践
  7. bzoj 4283 魔法少女伊莉雅
  8. 滴水藏海,以文为镜!
  9. 三个数相减的平方公式_小学一年级数学难点解析,附34个必考公式,孩子必备!...
  10. Linux下制作bin文件,并对其进行截取、合并、修改