day01爬虫三部曲

一、爬虫的基本原理
1.什么是爬虫
爬虫就是爬取数据
2、什么是互联网
由一堆网络设备,把一台台计算机互联到一起称之为互联网
3、互联网建立的目的
数据的传递与数据共享
4、什么是数据
例如:
电商平台的商品信息
12306,票务信息
12306,票务信息
5、什么是上网
普通用户:
打开浏览器---->输入网址
----->往目标主机(服务器)发送请求
----->返回响应数据
----->把数据渲染到浏览器中
爬虫程序:
模拟浏览器
-->往目标主机发送请求
-->返回响应数据
-->解析并提取有价值的数据
-->保持数据(文件写入本地、持久化到数据库)
6、爬虫的全过程:
1.发送请求(请求库:Requests/Selenium)
2.获取响应数据
3.解析数据(解析库: BeautifulSoup4)
4.保持数据(存储库:文件保存/MongoDB)
总结:假如互联网中的数据比喻成一座宝藏,爬虫
就是在挖去宝藏

二、Requests请求库
1.安装与使用
pip3 install requests
2.分析请求流程:(模拟浏览器)
百度:
1.请求url
www.baidu.com
2.请求方式
get
post
3.响应状态码
'''


一、请求rul
http://www.xiaohaur.com/v/
二、请求方式
get
三、请求头信息
user-agent:用户代理
'''
import time
import requests
#爬虫三部曲
# 1.发送请求
def get_page(url):
response=requests.get(url)
return response

# 2.解析数据
import re
def parse_index(html):
#findall 匹配所有
#re.findall('正则匹配',‘文本匹配’,'匹配模式')
#re.S对全部文本进行搜索匹配
# print(html)
detail_urls=re.findall(
'<div class="items"><a class="imglink" href="(.*?)"',
html,re.S)
# print(detail_urls)
# for detail_url in detail_urls:
# print(detail_url)
return detail_urls

#解析详情页
def parse_detail(html):
movie_url=re.findall('<source src="(.*?)">',html,re.S)
#print(movie_url)
if movie_url:
return movie_url[0]
# 3.保存数据
import uuid
#uuid.uuid4()根据时间戳生成一段世界上唯一的字符串
def save_video(content):
with open(f'{uuid.uuid4()}.mp4','wb')as f:
f.write(content)
print('视频下载完毕')
# main+回车键
#测试实例
if __name__ == '__main__':
for line in range(6):
url=f'http://www.xiaohuar.com/list-3-{line}.html'
#发送请求
response=requests.get(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)
#往每一个详情页发送请求
detail_res=get_page(detail_url)
# print(response.text)

#解析详情页获取视频url
movie_url=parse_detail(detail_res.text)

#判断视频url存在则打印
if movie_url:
print(movie_url)

#往视频url发送请求获取视频二进制流
movie_res=get_page(movie_url)

#把视频的二进制流传给save_video函数保存到本地
save_video(movie_res.content)

'''
post 请求自动登录github:
请求URL:
https://github.com/session
请求方式:
post
请求头:
cookie
user-agent:
请求体:

'''
# 1.获取token随机字符串
'''
请求URL:
https://github.com/login
请求方式:
get
请求头:
cookie
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
2.解析并提取token字符串
#正则
'''
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/74.0.3729.131 Safari/537.36'
}
login_res = requests.get(url=login_url, headers=login_header)
# print(login_res.text)

# 解析提取token字符串
authenticity_token = re.findall(
'<input type="hidden" name="authenticity_token" value="(.*?)" />',
login_res.text,
re.S
)[0]
print(authenticity_token)

#获取login页面的cookies信息
#print(type(login.res.cookies))
# print(type(login_res.cookies.get_dict()))
login_cookies=login_res.cookies.get_dict()

# 2.开始登录
'''
post请求自动登录github
请求URL:
https://github.com/session
请求方式:
post
请求头:
cookie
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
请求体:
"commit": "Sign in",
"utf8": "✓",
"authenticity_token": authenticity_token,
"login": "sdfasdf",
"password": "13165465435",
"webauthn-support": "supported"
'''
# session登陆url
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/74.0.3729.131 Safari/537.36'
}

# 请求体信息
from_data = {
"commit": "Sign in",
"utf8": "✓",
"authenticity_token": authenticity_token,
"login": "sdfasdf",
"password": "13165465435",
"webauthn-support": "supported"
}
session_res=requests.post(url=session_url,
headers=login_header,
cookies=login_cookies,
data=from_data)
with open('github3.html','w',encoding='utf-8')as f:
f.write(session_res.text)
原文地址:https://www.cnblogs.com/2328322824chx/p/11113992.html