day3
01.爬虫介绍
# 1、什么是互联网?
互联网是由网络设备(网线,路由器,交换机,防火墙等等)和一台台计算机连接而成,像一张网一样。
# 2、互联网建立的目的?
互联网的核心价值在于数据的共享/传递:数据是存放于一台台计算机上的,而将计算机互联到一起的目的就是为了能够方便彼此之间的数据共享/传递,否则你只能拿U盘去别人的计算机上拷贝数据了。
# 3、什么是上网?爬虫要做的是什么?
我们所谓的上网便是由用户端计算机发送请求给目标计算机,将目标计算机的数据下载到本地的过程。
# 3.1 只不过,用户获取网络数据的方式是:
浏览器提交请求->下载网页代码->解析/渲染成页面。
# 3.2 而爬虫程序要做的就是:
模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中
# 3.1与3.2的区别在于:
我们的爬虫程序只提取网页代码中对我们有用的数据
# 4、总结爬虫
# 4.1 爬虫的比喻:
如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的猎物/数据
# 4.2 爬虫的定义:
向网站发起请求,获取资源后分析并提取有用数据的程序
# 4.3 爬虫的价值:
互联网中最有价值的便是数据,比如天猫商城的商品信息,链家网的租房信息,雪球网的证券投资信息等等,这些数据都代表了各个行业的真金白银,可以说,谁
掌握了行业内的第一手数据,谁就成了整个行业的主宰,如果把整个互联网的数据比喻为一座宝藏,那我们的爬虫课程就是来教大家如何来高效地挖掘这些宝藏,掌握了爬
虫技能,你就成了所有互联网信息公司幕后的老板,换言之,它们都在免费为你提供有价值的数据。
02.爬虫应用
# 1.通用爬虫:通用爬虫是搜索引擎(Baidu、Google、Yahoo等)“抓取系统”的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
1)搜索引擎如何抓取互联网上的网站数据?
a)门户网站主动向搜索引擎公司提供其网站的url
b)搜索引擎公司与DNS服务商合作,获取网站的url
c)门户网站主动挂靠在一些知名网站的友情链接中
# 2.聚焦爬虫:聚焦爬虫是根据指定的需求抓取网络上指定的数据。
例如:
获取豆瓣上电影的名称和影评,而不是获取整张页面中所有的数据值。
03.爬虫基本流程
# 1、发起请求:
使用http库向目标站点发起请求,即发送一个Request
Request包含:请求头、请求体等
# 2、获取响应内容
如果服务器能正常响应,则会得到一个Response
Response包含:html,json,图片,视频等
# 3、解析内容
解析html数据:正则表达式,第三方解析库如Beautifulsoup,pyquery等
解析json数据:json模块
解析二进制数据:以b的方式写入文件
import requests # 导入requests请求库
# 向百度主页发送请求,获取响应对象
# response = requests.get(url='https://www.baidu.com/')
# 设置字符编码为utf-8
# response.encording = 'utf-8'
# 打印响应文本
# print(response.text)
# 将响应文本写入本地
# with open('baidu.html', 'w', encoding='utf-8')as f:
# f.write(response.text)
'''
视频选项:
1.梨视频
'''
# import requests
# 向视频源地址发送请求
# response = requests.get('https://video.pearvideo.com/mp4/short/20190625/cont-1568862-14057323-hd.mp4')
# 打印二进制流,例如图片,视频等数据
# print(response.content)
# 保存视频到本地
# with open('视频.mp4', 'wb')as f:
# f.write(response.content)
# import requests
#
# response = requests.get(
# 'https://video.pearvideo.com/mp4/adshort/20190625/cont-1570107-14054821_adpkg-ad_hd.mp4')
# print(response.content)
# with open('视屏.mp4', 'wb')as f:
# f.write(response.content)
'''
1.先往梨视频主页发送请求
https://video.pearvideo.com/
解析获取所有视频的id
video_1570302
re.findall()
2.获取视频详情页url:
'''
# import requests
# import re # 正则,用于解析文本数据
# 先往梨视频主页发送请求
# response = requests.get('https://video.pearvideo.com/')
# print(response.text)
# re正则匹配所有的视频id
# 参数1:正则匹配规则
# 参数2:解析文本
# 参数3:匹配模式
# res_list = re.findall('<a href="video_(.*?)"', response.text, re.S)
# print(res_list)
# 拼接每一个视频详情页url
# for v_id in res_list:
# detail_url = 'https://www.pearvideo.com/video_' + v_id
# print(detail_url)
# 对每一个视频详情页发送请求获取视频源url
# response = requests.get(url=detail_url)
# print(response.text)
# 解析并提取视频详情页url
# 视频url
# video_url = re.findall('scrurl="(.*?)"', response.text, re.S)[0]
# print(video_url)
# 视频名称
# video_name = re.findall('<h1 class="video-tt">(.*?)</h1>', response.text, re.S)[0]
# print(video_name)
# 向视频url发送请求获取视频二进制流
# v_response = requests.get(video_url)
# with open('%s.mp4' % video_name, 'wb')as f:
# f.write(v_response.content)
# print(video_name, '视频爬取完成')
# main+回车键
# if _name_ == '_main_':
# num=10
# base_url = 'https://movie.douban.com/top250?start={}&filter='.format(num)
# num = 0
# for line in range(10):
# base_url = f'https://movie.douban.com/top250?start={num}&filter='
# num += 25
# print(base_url)
# 1.发送请求,调用函数
# response = get_page(base_url)
#2.解析文本
# movie_list=parse_index(response.text)
#3.保存数据
#数据的格式化
# for movie in movie_list:
#print(movie)
#解压赋值
#电影排名、电影url、电影名称、导演-主演-类型、电影评分、评价人数、电影简介
# v_top,v_url,v_name,v_daoyan,v_point,v_num,v_desc=movie
# v_top=movie[0]
# v_url=movie[1]
# movie_content=f
# print(movie_content)
#保存数据
# save_data(movie_content)
import requests
import re
#爬虫三部曲
#1.发送请求
def get_page(base_url):
response=requests.get(base_url)
return response
#2.解析文本
def parse_index(text):
res=re.findall('<div class="item">.*?<em class=''>(.*?<a href="(.*?)">)')
# print(res)
return res
#3.保存数据
def save_data(data):
with open('douban.txt','a',encoding='utf-8')as f:
f.write(data)
原文地址:https://www.cnblogs.com/xuwangzai/p/11094504.html
- Kettle 添加对应hadoop版本的支持
- Layui常用方法
- 使用Identity Server 4建立Authorization Server (4)
- 使用Identity Server 4建立Authorization Server (3)
- 使用Identity Server 4建立Authorization Server (2)
- 使用Identity Server 4建立Authorization Server (1)
- Java之异常处理
- 挖洞经验 | 看我如何利用SAML漏洞实现Uber内部聊天系统未授权登录
- 使用ichartjs生成图表
- 使用angular4和asp.net core 2 web api做个练习项目(四)
- list.add(),向List集合插入对象报空指针异常
- 使用angular4和asp.net core 2 web api做个练习项目(三)
- 即学即用系列一:纯函数
- Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Docker 入门到实战教程(十一)部署Vue+SpringBoot 前后端分离项目
- Docker 入门到实战教程(十二)ELK+Filebeat搭建日志分析系统
- Docker 入门到实战教程(十三)Docker Compose
- 解决IDEA2020.1版本的lombok插件问题
- 工具系列 | 视频监控RTSP转HLS解决方案
- Redis系列 |(一)六种基本数据结构
- 工具系列 | Jenkins 构建伟大,无所不能
- 工具系列 | H5自定义视频播放器实现
- 前端系列 |原生JS和jQuery循环遍历函数
- 工具系列 | H5如何实现人脸识别
- 形式化分析工具(六):HLPSL Tutorial(Example3)
- CODING DevOps + Nginx-ingress 实现自动化灰度发布
- TF入门04-TF实现Word2Vec
- TF入门03-实现线性回归&逻辑回归
- TF入门02-TensorFlow Ops