DAY-01

上午:

一、爬虫基本原理

1. 什么是爬虫?

爬取数据

2. 什么是互联网?

由一堆网络设备,把一台台的计算机互联到一起

3. 互联网建立的目的

数据的传递与分享

4. 什么是数据?

例如:电商平台的商品信息 链家、自如的房源信息 股票证券投资信息(雪球网,东方财富) 12306的票务信息

5. 什么是上网?

普通用户:打开浏览器

---> 输入网址

---> 往目标主机发送请求

---> 返回响应数据

---> 把数据渲染到浏览器中

爬虫程序:模拟浏览器

---> 往目标主机发送请求

---> 返回响应数据

---> 解析并提取有价值的数据

---> 保存数据(文件写入本地、持久化到数据库)

6. 爬虫的全过程

1. 发送请求(请求库:Request/Selenium)

2. 获取响应数据

3. 解析数据(解析库:BeautifulSoup4)

4. 保存数据(存储库:文件保存/MongoDB)

二、Request请求库

1. 安装与使用

pip3 install requests

2. 分析请求流程(模拟浏览器)

1.请求URL:www.baidu.com

2.请求方式:GET/POST......

3.响应状态码:2开头--->请求已接收、理解、接受

3开头--->信息不完整

4开头--->请求有语法错误或者未认证、禁止访问、没有资源

5开头--->服务端错误

3.请求头信息(Request Headers)

*User-Agent:用户代理

 

 课堂实例:

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

下午:

post请求自动登入github

 1 """
 2 请求URL:https://github.com/login
 3 
 4 请求头:
 5     cookies
 6     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
 7 
 8 请求体:
 9 Form Data:
10     commit: Sign in
11     utf8: ✓
12     authenticity_token: mOyooOxE7c/H7krQKEli+cwwy0+okuPOZqGEBSyu/kRfLHT2mNGu9RQcDnb1ovua1zQe3LOyYXxrWxFL+2aAcg==
13     login: gr6g5r
14     password: huhuhhge
15     webauthn-support: supported
16 """
17 
18 # 1.获取token随机字符串
19 import requests
20 import re
21 login_url = 'https://github.com/login'
22 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'}
23 login_response = requests.get(url=login_url,headers=login_header)
24 # print(login_response.text)
25 
26 # 2.解析并截取tocken字符串
27 authenticity_token = re.findall('<input type="hidden" name="authenticity_token" value="(.*?)" />',login_response.text,re.S)[0]
28 print(authenticity_token)
29 
30 #获取login页面的cookie信息
31 login_cookies = login_response.cookies.get_dict()
32 # *.get_dict:转换为字典类型
33 
34 #session登陆githu
35 session_url = 'https://github.com/session'
36 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'}
37 form_data = {"commit": "Sign in",
38              "utf8": "",
39              "authenticity_token": authenticity_token,
40              "login": "******",
41              "password": "***********",
42              "webauthn-support": "supported"}
43 session_response = requests.post(url=session_url,headers=session_headers,cookies=login_cookies,data=form_data)
44 
45 with open('github3.html','w',encoding='utf-8') as f:
46     f.write(session_response.text)

 

posted @ 2019-07-01 14:53  吼嘿嘿吼  阅读(85)  评论(0编辑  收藏  举报