day 01 python爬虫原理

# 今日内容:爬虫原理
# 爬虫课程:
# 实训要求:
# 一 课下写作业
# 二 编写博客


# 一 爬虫基本原理
# 1 什么是爬虫
# 爬虫就是爬数据
# 2 是什么互联网
# 3 互联网建立的目的
# 数据的传递与数据的共享
# 4 什么是数据
# 电商平台的商品信息(淘宝,京东,亚马逊)
# 链家,自如(租房平台的房源信息)
# 股票证券投资信息(东方财富)
# 5 什么是上网
# 普通用户:
# 打开浏览器--->输入网址
# --->往目标主机发送请求
# 爬虫三部曲
# 爬取校花视屏网
# 一 请求url
# 二 请求方式
# 三 请求头信息
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(对全部文本进行搜索匹配)
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)
# 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('视频下载完毕。。。请客人观赏!!!')
# 测试用例
if __name__ == '__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)
# 循环遍历详情页 url
for detail_url in detail_urls:
# print(detail_url)
# 往每一个详情页发送请求
detail_res=get_page(detail_url)
# print(response.text)
# 解析详情页获取视频url
# print(detail_res)
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
# 请求体
# commit: Sign in
# utf8: ✓
# authenticity_token: <input type="hidden" name="authenticity_token" value="" />
# login: qweqwe
# password: qweqweqw
# webauthn-support: supported
# 1,访问登陆页面获取token随机字符串
# 请求url
# https://github.com/login
# 请求方式
# get
# 请求头
# COOKIES
# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
# 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)
# 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页面的cookie信息
# print(type(login_res.cookies.get_dict()))
login_cookie=login_res.cookies.get_dict()
# session登录url
session_url='https://github.com/session'
# 请求头信息
session_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'
}
# 请求体信息
form_data={
"commit": "Sign in",
"utf8": "✓",
"authenticity_token":authenticity_token,
"login": "RuiZinb",
"password": "Pig,1574140397",
"webauthn-support": "supported"

}
session_res=requests.post(url=session_url,
headers=session_header,
cookies=login_cookie,
data=form_data
)
with open('github3.html','w',encoding='utf-8')as f:
f.write(session_res.text)
posted @ 2019-07-01 14:48  RuiZi乄  阅读(172)  评论(0编辑  收藏  举报