Day 01
程序员文章站
2022-06-22 12:53:09
今日内容:爬虫课程: 一 爬虫基本原理 二 request请求库一 爬虫基本原理 1、什么是爬虫? 爬虫就是爬取数据 2、什么是互联网? 由一堆网络设备,把一台台计算机互联到一起称之为互联网。 3、互联网建立的目的 数据的传递与数据的共享 4、什么是数据? 例如: 电商平台的商品信息... ......
今日内容:
爬虫课程:
一 爬虫基本原理
二 request请求库
一 爬虫基本原理
1、什么是爬虫?
爬虫就是爬取数据
2、什么是互联网?
由一堆网络设备,把一台台计算机互联到一起称之为互联网。
3、互联网建立的目的
数据的传递与数据的共享
4、什么是数据?
例如:
电商平台的商品信息()
链家、自如租房平台的房源信息
股票证券投资信息()
...
12306、票务信息(抢票)
5、什么是上网?
普通用户:
打开互联网
--->输入网址
--->往目标主机发送请求
--->返回响应数据
--->把数据渲染到浏览器中
爬虫程序:
模拟浏览器
--->往目标主机发送请求
--->返回响应数据
--->解析并提取有价值的数据
--->保存数据(文件写入本地、持久化到数据库中)
6、爬虫全过程:
1.发送数据(请求库:request/selenium)
2.获取响应数据
3.解析数据(解析库:beautifulsoup4)
4.保存数据(存储库:文件保存/mongodb)
总结:我们可以把互联网中的数据比喻成一座宝藏,爬虫其实就是在挖去宝藏。
二 requests请求库
1、安装与使用
pip3 install requests
2、分析请求流程(模拟浏览器)
- 百度:
1.请求url
www.baidu.com
2.请求方式
get
post
3.响应状态码
1 """ 2 爬取校花网视频: 3 一 请求url 4 https://www.xiaohuar.com/v/ 5 二 请求方式 6 get 7 三 请求头信息 8 user-agent:用户代理 9 """ 10 import time 11 import requests 12 # 爬虫三部曲 13 # 1.发送请求 14 def get_page(url): 15 response = requests.get(url) 16 return response 17 18 # 2.解析数据 19 import re 20 def parse_index(html): 21 # findall匹配所有 22 # re.findall("正则匹配规则","匹配文本","匹配模式") 23 # re.s:对全部文本运行搜索匹配 24 detail_urls = re.findall( 25 '<div class="items"><a class="imglink" href="(.*?)" ',html,re.s) 26 # for detail_url in detail_urls: 27 # print(detail_url) 28 return detail_urls 29 # 解析详情页 30 def parse_detail(html): 31 movie_url = re.findall('<source src="(.*?)">',html,re.s) 32 # print(movie_url) 33 if movie_url: 34 return movie_url[0] 35 # 3.保存数据 36 import uuid 37 #uuid.uuid4()根据时间戳生成一段世界上唯一的字符串 38 def save_video(content): 39 with open(f'{uuid.uuid4()}.mp4','wb') as f: 40 f.write(content) 41 print('视频已下载完毕') 42 # main + 回车键 43 # 测试用例 44 if __name__ == '__main__': 45 for line in range(6): 46 url = f'http://www.xiaohuar.com/list-3-{line}.html' 47 48 # 发送请求 49 response = get_page(url) 50 # print(response) 51 #返回响应状态码 52 # print(response.status_code) 53 # 返回响应文本 54 # print(response.text) 55 # 解析主页页面 56 detail_urls = parse_index(response.text) 57 # 循环遍历详情页url 58 for detail_url in detail_urls: 59 # print(detail_url) 60 # 往每一个详情页发送请求 61 detail_res= get_page(detail_url) 62 # print(response.text) 63 # 解析详情页获取视频url 64 movie_url = parse_detail(detail_res.text) 65 # 判断视频url存在则打印 66 if movie_url: 67 print(movie_url) 68 # 往视频url发送请求获取视频二进制流 69 movie_res = get_page(movie_url) 70 # 把视频的二进制流传给save_video函数去保存到本地 71 save_video(movie_res.content)