学习资料:尚硅谷_爬虫
学习环境: pycharm
一.爬虫基本概念
爬虫定义
> 解释1:通过程序,根据URL进行爬取网页,获取有用信息
> 解释2:使用程序模拟浏览器,向服务器发送请求,获取相应信息
爬虫核心
> 1.爬取整个网页
> 2.解析数据,获取关心的数据
> 3.难点:爬虫VS非爬虫
爬虫设计思路
> 1.确定爬取的url
> 2.模拟浏览器通过http协议访问url,获取服务器返回的html代码
> 3.解析html代码
二、urllib库基础
1.任务一:下载想要的网页、图片、视频、音频
(1)确定下载文件的url
(2)urllib.request.urlretrieve(url,文件名) 注意文件的格式(网页:html,图片:jpg、png...,视频:mp4...,音频:mp3...)
import urllib.request
#下载网页
url_page="http://www.baidu.com"
#url:下载路径,filename:文件名字
#在python中 可以变量的名字 也可以直接写值
urllib.request.urlretrieve(url_page,'baidu.html')
#下载图片
url_img="https://img2.baidu.com/it/u=1239151102,985906506&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=756"
urllib.request.urlretrieve(url_img,'SunNan.jpg')
#下载视频
url_video="https://vdept3.bdstatic.com/mda-qfki2ugsvapzwmi5/360p/h264/1718974059553088160/mda-qfki2ugsvapzwmi5.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1718992706-0-0-ec02705d0acdbcc898d46a43306803c0&bcevod_channel=searchbox_feed&pd=1&cr=0&cd=0&pt=3&logid=3506132986&vid=18030693424817568764&klogid=3506132986&abtest=101830_1-102148_2-17451_1"
urllib.request.urlretrieve(url_video,'Kind Of Sadness By Sun Nan.mp4')
#下载音频
url_audio="https://ws6.stream.qqmusic.qq.com/C4000044M6Un0RXph2.m4a?guid=3844259990&vkey=FE194254F48E7427320B0F215EDE6F31C0FE911757B199D0332896D1D5E837402D5BFFD5FADE06533C81288B334789E9411E173F9FED349F&uin=2131640053&fromtag=120032"
urllib.request.urlretrieve(url_audio,"Maple.mp3")
2.任务二:获取百度首页(http协议)的源码
(1)确定url:“http://www.baidu.com”
(2)模拟浏览器向服务器发送请求 response=urllib.request.urlopen(url) HTTPResponse
(3)获取页面源码 content=response.read().decode('UTF-8') 解码:二进制->字符串
#使用urllib来获取百度首页的源码
#一个类型 response:HTTPResponse
#六个方法 read、readline、readlines、getcode、geturl、getheaders
import urllib.request
#(1)定义url 就是要访问的地址
url='http://www.baidu.com'
#(2)模拟浏览器向服务器发送请求 response 是 HTTPResponse的类型
response=urllib.request.urlopen(url)
#(3)获取相应中页面源码 content 内容
#read方法 返回的是字节形式的二进制数据 需要转化为字符串
#二进制->字符串 解码 decode('编码的格式')
#read() 按照一个一个字节的去读
#read(n) 返回n个字节
#readline() 读取一行
#readlines() 一行一行读
#response.getcode() 返回状态码 如果是200了 证明逻辑没有错
#response.geturl() 返回url地址
#response.getheaders() 获取状态信息
content=response.read().decode('UTF-8')
#(4) 打印数据
print(content)
3.任务三:获取百度首页(https协议)的源码(请求对象的定制)
url的组成:
例如
#https://www.baidu.com/sf/vsearch?pd=video&tn=vsearch
#url的组成
#http/https www.baidu.com 80/443 sf/vsearch pd=xxx&... #
#协议 主机 端口号 路径 参数 锚点
#协议默认端口号:http 80 https 443 mysql 3306 oracle 1521 mongodb 27017 redis 6379
UA介绍:User Agent中文名为用户代理,简称UA,它是一个特殊字符串头,是的服务器识别客户是用的操作系统及
#版本、CPU类型、浏览器及版本等等,例如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36#UA反爬:网站通过检查请求中的User-Agent字段来判断请求是否来自正常的浏览器。如果一个请求的User-Agent字段看起来像是一个爬虫程序(例如,没有包含常见的浏览器信息或者包含明显的爬虫标识),
# 网站可能会拒绝响应这个请求,或者返回错误信息、验证码等,以此来阻止爬虫的访问。
遇到UA反爬解决策略:请求对象的定制
(1)确定url
(2)将UA字段以字典形式保存在headers中
[网页右键检查->network->刷新网页点击name栏第一行->在headers中的request Headers中查看UA]
headers={'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.5211 SLBChan/111'}
(3)定制请