一、爬虫基本原理
1.什么是爬虫
爬虫就是爬取数据
2.什么是互联网
有一堆网络设备,把一台台的计算机互联到一起称为互联网
3.互联网建立的目的
数据的传递与数据的共享
4.什么是数据
例如:
电商平台的商品信息
链家,自如租房平台的房源信息
...
12306,票务信息
5.什么是上网
普通用户:
打开浏览器
——>输入网址
——>往目标主机发送请求
——>返回响应数据
——>把数据渲染到浏览器中
爬虫程序:
模拟浏览器
——>往目标主机发送请求
——>返回响应数据
——>解析并提取有价值的数据
——>保存数据(文件写入本地、持久化到数据库中)
6.爬虫的全过程
1.发送请求(请求库:Requests/Selenium)
2.获取响应
3.解析数据(解析库:BeautifulSoup4)
4.保存数据(存储库:文件保存/MongoDB)
总结:我们可以把互联网中的数据比喻成一座宝藏,爬虫其实就是在挖宝藏
二、requests请求库
1.安装与使用
pip3installrequests
2.分析请求流程(模拟浏览器)
-百度:
1.请求URL
2.请求方式
3.响应状态码
具体事例如下
'''
爬校花网视频:
一、请求rul
http://www.xiaohaur.com/v/
二、请求方式
get
三、请求头信息
user-agent:用户代理
'''
1importtime
2importrequests
3#爬虫三部曲
4#1.发送请求
5defget_page(url):
6response=requests.get(url)
7returnresponse
8#2.解析数据
9importre
10defparse_index(html):
11#findall匹配所有
12#re.findall('正则匹配规则','匹配文本','匹配模式')
13#re.S:对所有文本进行搜索匹配
14detail_urls=re.findall(
15'<divclass="items"><aclass="imglink"href="(.*?)"',
16html,re.S
17)
18returndetail_urls
19#解析详情页
20defparse_detail(html):
21movie_url=re.findall('<sourcesrc="(.*?)">',html,re.S)
22#print(movie_url)
23ifmovie_url:
24returnmovie_url[0]
25#3.保存数据
26importuuid
27#uuid.uuid4()根据时间戳生成一段世界上唯一的字符串
28defsave_video(content):
29withopen(f'{uuid.uuid4()}.mp4','wb')asf:
30f.write(content)
31print('视频下载完毕')
32#main+回车键
33#测试用例
34if__name__=='__main__':
35forlineinrange(6):
36url=f'http://www.xiaohuar.com/list-3-{line}.html'
37#发送请求
38response=requests.get(url)
39#print(response)
40##返回响应状态码
41#print(response.status_code)
42##返回响应文本
43#print(response.text)
44
45#解析主页页面
46detail_urls=parse_index(response.text)
47
48#循环遍历详情页url
49fordetail_urlindetail_urls:
50#print(detail_url)
51#往每一个详情页发送请求
52detail_res=get_page(detail_url)
53#print(response.text)
54#解析详情页获取视频url
55movie_url=parse_detail(detail_res.text)
56#判断视频url存在则打印
57ifmovie_url:
58print(movie_url)
59
60#往视频url发送请求获取视频二进制流
61movie_res=get_page(movie_url)
62
63#把视频的二进制流传给save_video函数保存到本地
64save_video(movie_res.content)
POST请求自动登录GitHub:
'''
POST请求自动登录GitHub:
一、请求rul
https://github.com/session
二、请求方式
POST
三.请求头
cookies
User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36
四.请求体
fromdata
commit:Signin
utf8:?
authenticity_token:LVyIb9FUxiI6XMain4PXzgOjKn9DzYzqdCwMvosVn+/Cht8LVgCuKjc7fbNfk5TiXf4W+6y56GmRnu1A4T0VIQ==
login:sjdkjw
password:1562132
webauthn-support:supported
'''
#获取token随机字符串
'''
1.访问登录页面获取token随机字符串
一、请求rul
https://github.com/login
二、请求方式
GET
三.请求头
cookies
User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36
2.解析并提取token字符串
#正则
<inputtype="hidden"name="authenticity_token"value="(.*?)"/>
'''
importrequests
importre
login_url='https://github.com/login'
#login页面的请求头信息
login_header={
'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36'
}
login_res=requests.get(url=login_url,headers=login_header)
#print(login_res.text)
#解析提取token字符串
authenicity_token=re.findall(
'<inputtype="hidden"name="authenticity_token"value="(.*?)"/>',
login_res.text,re.S
)[0]
print(authenicity_token)
#2.开始登录github
'''
POST请求自动登录GitHub:
一、请求rul
https://github.com/session
二、请求方式
POST
三.请求头
cookies
User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36
四.请求体
fromdata
commit:Signin
utf8:?
authenticity_token:LVyIb9FUxiI6XMain4PXzgOjKn9DzYzqdCwMvosVn+/Cht8LVgCuKjc7fbNfk5TiXf4W+6y56GmRnu1A4T0VIQ==
login:****
password:*****
webauthn-support:supported
'''
#获取login页面的cookies信息
login_cookies=login_res.cookies.get_dict()
#session登录url
session_url='https://github.com/session'
#请求头信息
session_headers={
'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36'
}
#请求体信息
form_data={
"commit":"Signin",
"utf8":"?",
"authenticity_token":"authenicity_token",
"login":"****",
"password":"*****",
"webauthn-support":"supported"
}
session_res=requests.post(url=session_url,
headers=session_headers,
cookies=login_cookies,
data=form_data
)
withopen('github1.html','w',encoding='utf-8')asf:
f.write(session_res.text)
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h54666.shtml