day01
一:爬虫基本原理
1.什么是爬虫?
爬虫就是爬取数据
2.什么是互联网?
由一堆网络设备,把一台台的计算机
互联到一起称之为互联网
3.互联网建立的目的
数据的传递与数据的共享
4.什么是数据?
例如:
电商平台的商品的信息(淘宝.京东.亚马逊)
链家.自如租房平台的房源信息
股票证券投资信息(东方财富、雪球)
...
12306,票务信息
5.什么是上网
普通用户:
打开浏览器
--->输入网址
--->往目标主机发送请求
--->返回响应数据
--->把数据渲染到浏览器中
爬虫程序:
模拟浏览器
--->往目标主机发送请求
--->返回响应数据
--->解析并提取有价值的数据
--->保存数据(文件写入本地.持久化到数据库中)
6.爬虫的全过程
1.发送请求(请求库:Requests/Selenium)
2.获取响应数据
3.解析数据(解析库 BeautifulSoup4)
4.保存数据(存储库:文件保存、MongoDB)
总结:我们可以吧互联网中的数据比喻成一座宝藏,爬虫其实就是在挖取宝藏
二:requeste请求库
1.安装与使用
pip3、install requests
.
import time import requests # #保存数据 # # 爬取校花网 # # 1.请求ural # # # # 2.请求方式 GET # # # # 3.请求头信息 # # User-Agent:用户代理 # # 爬虫三部曲 # # 1.发送请求 # # 2.解析数据 # # 3.保存数据 def get_page(url): response = requests.get(url) return response import re def parse_index(html): # re.findall('正则匹配规则','匹配文本','匹配模式') #re.S:对全部文本进行搜索匹配 #数组是值 链表是地止 detail_urls=re.findall( '<div class="items"><a class="imglink" href="(.*?)"', html,re.S) # print(detail_urls) return detail_urls def parse_detail(html): movie_url = re.findall('<source src="(.*?)">',html,re.S) if movie_url: return movie_url[0] import uuid #uuid.uuid4()根据时间戳生成一段世界上唯一的字符串 def save_video(content): with open(f'{uuid.uuid4()}.mp4','wb') as f: f.write(content) print("视频下载完毕") if __name__ == '__main__': # main+回车键 for line in range(6): #发送请求 url = f'http://www.xiaohuar.com/list-3-{line}.html' response = get_page(url) # print(response) # print(response.status_code) # print(response.text) # 解析主页页面 detail_urls = parse_index(response.text) # print(detail_urls) for detail_url in detail_urls : # print(detail_url) # response = get_page(detail_url) # print(response.text) detail_res = get_page(detail_url) movie_url = parse_detail(detail_res.text) print(movie_url) if movie_url: print(movie_url) movie_res = get_page(movie_url) save_video(movie_res.content)
2.post请求自动登录github
# POST请求自动登录github:
# 请求URL:
#
# 请求方式:
# POST
#
# 请求头:
# Cookie
# User-Agent:
#
# 请求体:
# commit : Sign in
# utf8:
#
'''
访问登录页面获取token随机字符串
请求URL
'''
#1.获取token随机字符串
'''
1.访问登录页面获取token随机字符串
请求URL:
https://github.com/login
请求方式:
GET
请求头:
Cookies
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
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
2.解析并提取token字符串
#正则
<input type="hidden" name="authenticity_token" value="(.*?)" />
import requests import re login_url = 'https://github.com/login' #login页面的请求头信息 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'} login_res = requests.get(url=login_url,headers=login_header) #authenticity_token a_k = re.findall('<input type="hidden" name="authenticity_token" value="(.*?)" />', login_res.text, re.S )#解析提取token字符串 print(a_k[0]) login_cookies = login_res.cookies.get_dict()#改为字典序 # 获取login页面的cookies信息 # print(type(login_res.cookies))查看类型 # print(type(login_res.cookies.get_dict)) #2.开始登录github session_url='https://github.com/session' 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'} form_data = { "commit": "Sign in", "utf8": "✓", "authenticity_token": a_k, "login": "***", "password": "***", "webauthn-support": "supported" } session_res = requests.post(url=session_url, headers=session_headers, cookies=login_cookies, data=form_data) with open('git.html','w',encoding='utf-8') as f: f.write(session_res.text)