Day 01

今日内容:
爬虫课程:
一 爬虫基本原理
二 request请求库

一 爬虫基本原理

1、什么是爬虫?
爬虫就是爬取数据

2、什么是互联网?
由一堆网络设备,把一台台计算机互联到一起称之为互联网。

3、互联网建立的目的
数据的传递与数据的共享

4、什么是数据?
例如:
电商平台的商品信息()
链家、自如租房平台的房源信息
股票证券投资信息()
...
12306、票务信息(抢票)

5、什么是上网?
普通用户:
打开互联网
--->输入网址
--->往目标主机发送请求
--->返回响应数据
--->把数据渲染到浏览器中

爬虫程序:
模拟浏览器
--->往目标主机发送请求
--->返回响应数据
--->解析并提取有价值的数据
--->保存数据(文件写入本地、持久化到数据库中)

6、爬虫全过程:
1.发送数据(请求库:Request/Selenium)
2.获取响应数据
3.解析数据(解析库:BeautifulSoup4)
4.保存数据(存储库:文件保存/MongoDB)

总结:我们可以把互联网中的数据比喻成一座宝藏,爬虫其实就是在挖去宝藏。

二 requests请求库

1、安装与使用
pip3 install requests

2、分析请求流程(模拟浏览器)
- 百度:
1.请求url
www.baidu.com

2.请求方式
GET
POST

3.响应状态码

测试用例:
01❤爬取视频
 1 """
 2 爬取校花网视频:
 3     一 请求url
 4         https://www.xiaohuar.com/v/
 5     二 请求方式
 6         GET
 7     三 请求头信息
 8         User-Agent:用户代理
 9 """
10 import time
11 import requests
12 # 爬虫三部曲
13 # 1.发送请求
14 def get_page(url):
15     response = requests.get(url)
16     return response
17 
18 # 2.解析数据
19 import re
20 def parse_index(html):
21     # findall匹配所有
22     # re.findall("正则匹配规则","匹配文本","匹配模式")
23     # re.S:对全部文本运行搜索匹配
24     detail_urls = re.findall(
25         '<div class="items"><a class="imglink" href="(.*?)" ',html,re.S)
26     # for detail_url in detail_urls:
27     #     print(detail_url)
28     return detail_urls
29 # 解析详情页
30 def parse_detail(html):
31     movie_url = re.findall('<source src="(.*?)">',html,re.S)
32     # print(movie_url)
33     if movie_url:
34         return movie_url[0]
35 # 3.保存数据
36 import uuid
37 #uuid.uuid4()根据时间戳生成一段世界上唯一的字符串
38 def save_video(content):
39     with open(f'{uuid.uuid4()}.mp4','wb') as  f:
40         f.write(content)
41         print('视频已下载完毕')
42 # main  +  回车键
43 # 测试用例
44 if __name__ == '__main__':
45     for line in range(6):
46         url  =  f'http://www.xiaohuar.com/list-3-{line}.html'
47 
48         # 发送请求
49         response = get_page(url)
50         # print(response)
51         #返回响应状态码
52         # print(response.status_code)
53         # 返回响应文本
54         # print(response.text)
55         # 解析主页页面
56         detail_urls = parse_index(response.text)
57         # 循环遍历详情页url
58         for detail_url in detail_urls:
59             # print(detail_url)
60             # 往每一个详情页发送请求
61             detail_res= get_page(detail_url)
62             # print(response.text)
63             # 解析详情页获取视频url
64             movie_url = parse_detail(detail_res.text)
65             # 判断视频url存在则打印
66             if movie_url:
67                 print(movie_url)
68                 # 往视频url发送请求获取视频二进制流
69                 movie_res = get_page(movie_url)
70                 # 把视频的二进制流传给save_video函数去保存到本地
71                 save_video(movie_res.content)

 02POST请求自动登录

 1 '''
 2 POST请求自动登录github:
 3     请求url:
 4         https://github.com/session
 5     请求方式:
 6         POST
 7     请求头:
 8         Cookie
 9         User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
10     请求体:
11         commit: 登入
12         utf8: ✓
13         authenticity_token: BmBVp2/GJ9KBl9fNLe17Dl9mrbQEDhqDifKOz1KJ4mgo3+Pv7COy+so2zVc0gZ1hVJP9i1+boDfsQl41mi2AoQ==
14         login: *******
15         password:*******
16         webauthn-support: supported
17 
18 '''
19 # 获取token随机字符串
20 '''
21 1.访问登录页面获取token的随机字符串
22     请求url:
23         https://github.com/login
24     请求方式:
25         GET
26     请求头:
27         COOKIES
28         User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
29 2.解析并提取token字符串
30 # 正则
31 <input type="hidden" name="authenticity_token" value="(.*?)"/>
32 '''
33 import requests
34 import re
35 login_url = 'https://github.com/login'
36 # login页面的请求头信息
37 login_header = {
38     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
39 }
40 login_res = requests.get(url=login_url, headers=login_header)
41 # print(login_res.text)
42 
43 #解析并提取token字符串#
44 authenticity_token=re.findall(
45     '<input type="hidden" name="authenticity_token" value="(.*?)" />',login_res.text,re.S)[0]
46 # print(authenticity_token)
47 
48 #获取login页面的cookies信息
49 # print(type(login_res.cookies))
50 # print(type(login_res.cookies.get_dict()))
51 login_cookies = login_res.cookies.get_dict()
52 
53 # 开始登录github
54 '''
55 POST请求自动登录github:
56     请求url:
57         https://github.com/session
58     请求方式:
59         POST
60     请求头:
61         Cookie
62         User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
63     请求体:
64         commit: 登入
65         utf8: ✓
66         authenticity_token: BmBVp2/GJ9KBl9fNLe17Dl9mrbQEDhqDifKOz1KJ4mgo3+Pv7COy+so2zVc0gZ1hVJP9i1+boDfsQl41mi2AoQ==
67         login: *******
68         password:*******
69         webauthn-support: supported
70 
71 '''
72 # session登录url
73 session_url = 'https://github.com/session'
74 # 请求头信息
75 session_headers = {
76     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
77 }
78 # 请求体信息
79 form_data = {
80     "commit":"Sign in",
81     "utf8": "",
82     "authenticity_token": authenticity_token,
83     "login":"********",
84     "password":"*******",
85     "webauthn-support": "supported"
86 }
87 session_res = requests.post(url=session_url,
88                             headers=session_headers,
89                             cookies=login_cookies,
90                             data=form_data)
91 with open ('github3.html','w',encoding='utf-8') as f:
92     f.write(session_res.text)

 



posted @ 2019-07-01 14:47  _DL  阅读(183)  评论(0编辑  收藏  举报