今日内容:
爬虫课程:
一 爬虫基本原理
二 request请求库
一 爬虫基本原理
一、什么是爬虫?
爬虫就是爬取数据
二、什么是互联网?
由一堆网络设备,把一台台计算机互联到一块儿称之为互联网。
三、互联网创建的目的
数据的传递与数据的共享
四、什么是数据?
例如:
电商平台的商品信息()
链家、自如租房平台的房源信息
股票证券投资信息()
...
1230六、票务信息(抢票)
五、什么是上网?
普通用户:
打开互联网
--->输入网址
--->往目标主机发送请求
--->返回响应数据
--->把数据渲染到浏览器中
爬虫程序:
模拟浏览器
--->往目标主机发送请求
--->返回响应数据
--->解析并提取有价值的数据
--->保存数据(文件写入本地、持久化到数据库中)
六、爬虫全过程:
1.发送数据(请求库:Request/Selenium)
2.获取响应数据
3.解析数据(解析库:BeautifulSoup4)
4.保存数据(存储库:文件保存/MongoDB)
总结:咱们能够把互联网中的数据比喻成一座宝藏,爬虫其实就是在挖去宝藏。
二 requests请求库
一、安装与使用
pip3 install requests
二、分析请求流程(模拟浏览器)
- 百度:
1.请求url
www.baidu.com
2.请求方式
GET
POST
3.响应状态码
测试用例:
01❤爬取视频
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)
02❤POST请求自动登陆html
1 ''' 2 POST请求自动登陆github: 3 请求url: 4 https://github.com/session 5 请求方式: 6 POST 7 请求头: 8 Cookie 9 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 10 请求体: 11 commit: 登入 12 utf8: ✓ 13 authenticity_token: BmBVp2/GJ9KBl9fNLe17Dl9mrbQEDhqDifKOz1KJ4mgo3+Pv7COy+so2zVc0gZ1hVJP9i1+boDfsQl41mi2AoQ== 14 login: ******* 15 password:******* 16 webauthn-support: supported 17 18 ''' 19 # 获取token随机字符串 20 ''' 21 1.访问登陆页面获取token的随机字符串 22 请求url: 23 https://github.com/login 24 请求方式: 25 GET 26 请求头: 27 COOKIES 28 User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 29 2.解析并提取token字符串 30 # 正则 31 <input type="hidden" name="authenticity_token" value="(.*?)"/> 32 ''' 33 import requests 34 import re 35 login_url = 'https://github.com/login' 36 # login页面的请求头信息 37 login_header = { 38 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' 39 } 40 login_res = requests.get(url=login_url, headers=login_header) 41 # print(login_res.text) 42 43 #解析并提取token字符串# 44 authenticity_token=re.findall( 45 '<input type="hidden" name="authenticity_token" value="(.*?)" />',login_res.text,re.S)[0] 46 # print(authenticity_token) 47 48 #获取login页面的cookies信息 49 # print(type(login_res.cookies)) 50 # print(type(login_res.cookies.get_dict())) 51 login_cookies = login_res.cookies.get_dict() 52 53 # 开始登陆github 54 ''' 55 POST请求自动登陆github: 56 请求url: 57 https://github.com/session 58 请求方式: 59 POST 60 请求头: 61 Cookie 62 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 63 请求体: 64 commit: 登入 65 utf8: ✓ 66 authenticity_token: BmBVp2/GJ9KBl9fNLe17Dl9mrbQEDhqDifKOz1KJ4mgo3+Pv7COy+so2zVc0gZ1hVJP9i1+boDfsQl41mi2AoQ== 67 login: ******* 68 password:******* 69 webauthn-support: supported 70 71 ''' 72 # session登陆url 73 session_url = 'https://github.com/session' 74 # 请求头信息 75 session_headers = { 76 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' 77 } 78 # 请求体信息 79 form_data = { 80 "commit":"Sign in", 81 "utf8": "√", 82 "authenticity_token": authenticity_token, 83 "login":"********", 84 "password":"*******", 85 "webauthn-support": "supported" 86 } 87 session_res = requests.post(url=session_url, 88 headers=session_headers, 89 cookies=login_cookies, 90 data=form_data) 91 with open ('github3.html','w',encoding='utf-8') as f: 92 f.write(session_res.text)