当前位置:
首页 > Python基础教程 >
-
Python3基础之day01 爬虫基本原理以及requests请求库
一、爬虫基本原理 1.什么是爬虫 爬虫就是爬取数据 2.什么是互联网 有一堆网络设备,把一台台的计算机互联到一起称为互联网 3.互联网建立的目的 数据的传递与数据的共享 4.什么是数据 例如: 电商平台的商品信息 链家,自如租房平台的房源信息 ... 12306,票务信息 5.什么是上网 普通用户: 打开浏览器 ——>输入网址 ——>往目标主机发送请求 ——>返回响应数据 ——>把数据渲染到浏览器中 爬虫程序: 模拟浏览器 ——>往目标主机发送请求 ——>返回响应数据 ——>解析并提取有价值的数据 ——>保存数据(文件写入本地、持久化到数据库中) 6.爬虫的全过程 1.发送请求(请求库:Requests/Selenium) 2.获取响应 3.解析数据(解析库:BeautifulSoup4) 4.保存数据(存储库:文件保存/MongoDB)
总结:我们可以把互联网中的数据比喻成一座宝藏,爬虫其实就是在挖宝藏 二、requests请求库 1.安装与使用 pip3 install requests 2.分析请求流程(模拟浏览器) -百度: 1.请求URL 2.请求方式 3.响应状态码 具体事例如下
''' 爬校花网视频: 一、请求rul http://www.xiaohaur.com/v/ 二、请求方式 get 三、请求头信息 user-agent:用户代理 '''
1 import time 2 import requests 3 #爬虫三部曲 4 #1.发送请求 5 def get_page(url): 6 response = requests.get(url) 7 return response 8 # 2.解析数据 9 import re 10 def parse_index(html): 11 # findall匹配所有 12 # re.findall('正则匹配规则','匹配文本','匹配模式') 13 # re.S:对所有文本进行搜索匹配 14 detail_urls = re.findall( 15 '<div class="items"><a class="imglink" href="(.*?)"', 16 html,re.S 17 ) 18 return detail_urls 19 # 解析详情页 20 def parse_detail(html): 21 movie_url = re.findall('<source src="(.*?)">',html,re.S) 22 #print(movie_url) 23 if movie_url: 24 return movie_url[0] 25 # 3.保存数据 26 import uuid 27 #uuid.uuid4()根据时间戳生成一段世界上唯一的字符串 28 def save_video(content): 29 with open(f'{uuid.uuid4()}.mp4','wb')as f: 30 f.write(content) 31 print('视频下载完毕') 32 # main + 回车键 33 # 测试用例 34 if __name__ == '__main__': 35 for line in range(6): 36 url=f'http://www.xiaohuar.com/list-3-{line}.html' 37 #发送请求 38 response = requests.get(url) 39 #print(response) 40 # # 返回响应状态码 41 # print(response.status_code) 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 detail_res = get_page(detail_url) 53 #print(response.text) 54 #解析详情页获取视频url 55 movie_url = parse_detail(detail_res.text) 56 # 判断视频url存在则打印 57 if movie_url: 58 print(movie_url) 59 60 # 往视频url发送请求获取视频二进制流 61 movie_res = get_page(movie_url) 62 63 # 把视频的二进制流传给save_video函数保存到本地 64 save_video(movie_res.content)
POST请求自动登录GitHub:
''' POST请求自动登录GitHub: 一、请求rul https://github.com/session 二、请求方式 POST 三.请求头 cookies User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 四.请求体 from data commit: Sign in 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 (Windows NT 10.0; WOW64) 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; WOW64) 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字符串 authenicity_token = re.findall( '<input type="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 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 四.请求体 from data commit: Sign in 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 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' } #请求体信息 form_data = { "commit": "Sign in", "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 ) with open('github1.html','w',encoding='utf-8') as f: f.write(session_res.text)
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式