DAY-01
上午:
1. 什么是爬虫?
爬取数据
2. 什么是互联网?
由一堆网络设备,把一台台的计算机互联到一起
3. 互联网建立的目的
数据的传递与分享
4. 什么是数据?
例如:电商平台的商品信息 链家、自如的房源信息 股票证券投资信息(雪球网,东方财富) 12306的票务信息
5. 什么是上网?
普通用户:打开浏览器
---> 输入网址
---> 往目标主机发送请求
---> 返回响应数据
---> 把数据渲染到浏览器中
爬虫程序:模拟浏览器
---> 往目标主机发送请求
---> 返回响应数据
---> 解析并提取有价值的数据
---> 保存数据(文件写入本地、持久化到数据库)
6. 爬虫的全过程
1. 发送请求(请求库:Request/Selenium)
2. 获取响应数据
3. 解析数据(解析库:BeautifulSoup4)
4. 保存数据(存储库:文件保存/MongoDB)
二、Request请求库
1. 安装与使用
pip3 install requests
2. 分析请求流程(模拟浏览器)
1.请求URL:www.baidu.com
2.请求方式:GET/POST......
3.响应状态码:2开头--->请求已接收、理解、接受
3开头--->信息不完整
4开头--->请求有语法错误或者未认证、禁止访问、没有资源
5开头--->服务端错误
3.请求头信息(Request Headers)
1 import requests 2 #爬虫三部曲 3 # 1.发送请求 4 def get_page(url): 5 response = requests.get(url) 6 return response 7 8 # 2.解析数据 9 import re 10 def parse_index(html): 11 #findall匹配所有 12 # re.findall('正则匹配规则','匹配文本','匹配模式') 13 #re.S:对全部文本进行搜索匹配 14 detail_urls = re.findall('<div class="items"><a class="imglink" href="(.*?)"',html,re.S) 15 return detail_urls 16 #解析详情页 17 def parse_detail(html): 18 movie_url = re.findall('<source src="(.*?)">',html,re.S) 19 if movie_url: 20 return movie_url[0] #只返回视频的详细网址 21 22 # 3.保存数据 23 import uuid 24 # uuid.uuid4()根据时间戳生成一段世界上唯一的字符串 25 def save_video(content): 26 with open(f'{uuid.uuid4()}.mp4','wb') as f: 27 f.write(content) 28 print('视频下载完毕') 29 30 #测试用例 31 if __name__ == '__main__': 32 for line in range(6): 33 url= f'http://www.xiaohuar.com/list-3-{line}.html' 34 35 # 发送请求 36 response = get_page(url) 37 # print(response) 38 39 # #返回响应状态码 40 # print(response.status_code) 41 42 # # 返回响应文本 43 # print(response.text) 44 45 # 解析主页页面 46 detail_urls = parse_index(response.text) 47 48 #循环遍历详情页url 49 for detail_url in detail_urls: 50 print(detail_url) 51 52 #往每个详情页发送请求 53 detail_response = get_page(detail_url) 54 # print(response.text) 55 56 #解析详情页获取视频url 57 movie_url = parse_detail(detail_response.text) 58 59 #判断视频存在url并打印 60 if movie_url: 61 print(movie_url) 62 63 #往视频url发送请求获取视频的二进制流 64 movie_response=get_page(movie_url) 65 66 #把视频的二进制流传给save_video函数保存到本地 67 save_video(movie_response.content)
下午:
post请求自动登入github
1 """ 2 请求URL:https://github.com/login 3 4 请求头: 5 cookies 6 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 7 8 请求体: 9 Form Data: 10 commit: Sign in 11 utf8: ✓ 12 authenticity_token: mOyooOxE7c/H7krQKEli+cwwy0+okuPOZqGEBSyu/kRfLHT2mNGu9RQcDnb1ovua1zQe3LOyYXxrWxFL+2aAcg== 13 login: gr6g5r 14 password: huhuhhge 15 webauthn-support: supported 16 """ 17 18 # 1.获取token随机字符串 19 import requests 20 import re 21 login_url = 'https://github.com/login' 22 login_header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'} 23 login_response = requests.get(url=login_url,headers=login_header) 24 # print(login_response.text) 25 26 # 2.解析并截取tocken字符串 27 authenticity_token = re.findall('<input type="hidden" name="authenticity_token" value="(.*?)" />',login_response.text,re.S)[0] 28 print(authenticity_token) 29 30 #获取login页面的cookie信息 31 login_cookies = login_response.cookies.get_dict() 32 # *.get_dict:转换为字典类型 33 34 #session登陆githu 35 session_url = 'https://github.com/session' 36 session_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'} 37 form_data = {"commit": "Sign in", 38 "utf8": "✓", 39 "authenticity_token": authenticity_token, 40 "login": "******", 41 "password": "***********", 42 "webauthn-support": "supported"} 43 session_response = requests.post(url=session_url,headers=session_headers,cookies=login_cookies,data=form_data) 44 45 with open('github3.html','w',encoding='utf-8') as f: 46 f.write(session_response.text)