当前位置: 首页 > 后端技术 > Python

二十行Python代码爬取微博优质美妆视频(福利)

时间:2023-03-26 17:30:23 Python

兄弟,不发优质爬虫就不会看,唉~原来你们都是这样的人!!!大家关注我这么久了,当然要放一些正经的教学视频了。毕竟不正经的人都不想看。今天,我要给你一个小妹妹。使用的环境是Python3.6和pycharm。需要安装浏览器驱动(谷歌或者火狐都可以,只要和浏览器版本相近即可)。没有的可以私信“小姐姐”领取包括这次在内的完整代码。获取完整教程。一、爬虫原理的作用:批量获取互联网数据(文本、图片、音频、视频)本质:请求和响应方式多为(get/post)方法描述GET请求页面,并返回页面内部cylinderHEAD类似于GET请求,但返回的响应中没有具体内容。它用于获取标题。POST主要用于提交表单或上传文件。数据包含在请求正文中。PUT是客户端向服务器传输的数据,而不是指定的文件。ContentDELETE请求服务器删除指定页面CONNECT以服务器为跳板,允许服务器代替客户端访问其他网页OPTIONS允许客户端查看服务器的性能TRACE回显服务器收到的请求,主要用于测试或诊断请求头RequestHeaders(键值对)告诉服务器请求的一些配置信息,让服务器判断配置信息并解析请求头来解释服务器要使用的附加信息。比较重要的信息包括Cookie、Referer、User-Agent等。Accept:请求头字段,用于指定客户端可以接受哪些类型的信息。Accept-Language:指定客户端接受的语言类型。Accept-Encoding:指定客户端可接受的内容编码。Host:用于指定请求支持的主机IP和端口号,其内容为请求URL的原始服务器或网关所在的位置。从HTTP版本1.1开始,请求必须包含此内容。Cookie:Cookies的复数形式也很常用,是网站为了识别用户进行会话跟踪而存储在本地的数据。它的主要功能是维护当前的访问会话。比如我们输入用户名和密码成功登录一个网站后,服务器会使用session来保存登录状态信息。每次我们刷新或者请求站点的其他页面,都会发现都处于登录状态。这是Cookies的功劳。Cookie中有信息可以识别我们相应服务器的会话。浏览器每次请求该站点的页面时,都会在请求头中添加cookie,并返回给服务器。服务器通过cookie识别我们,发现当前状态是登录状态,所以返回的结果是登录后才能看到的网页内容。Referer:此内容用于标识请求是从哪个页面发送的。服务端可以得到这些信息并进行相应的处理,比如来源统计、防盗链处理等。客户端使用的版本、浏览器和版本。做爬虫的时候加上这个信息就可以伪装成浏览器:如果不加,可能很容易被识别为爬虫。Content-Type:也称为互联网媒体类型(InternetMediaType)或MIME类型,在HTTP协议消息头中,用于表示特定请求中的媒体类型信息。比如text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型。更多的对应关系可以参考这个对照表:http://tool.oschina.net/commonsResponse都包含了什么?响应,由服务器返回给客户端,可以分为三部分:响应状态码(ResponseStatusCode)、响应头(ResponseHeaders)、响应体(ResponseBody)1、响应状态码响应状态码表示服务器状态的响应,比如200表示服务器正常响应,404表示找不到页面,500表示服务器内部出现错误。在爬虫中,我们可以根据状态码来判断服务器的响应状态。如果状态码为200,则证明数据返回成功,再进行进一步的处理,否则直接忽略。2.响应头3.响应体最重要的是响应体的内容。响应的文本数据在响应正文中。比如请求一个网页,它的响应体就是网页的HTML代码;当请求图片时,它的响应体是图片的二进制数据。我们使用爬虫请求网页后,要解析的内容就是响应体。在浏览器开发者工具中点击Preview可以看到网页的源代码,也就是响应体的内容,也就是解析的目标。在做爬虫的时候,我们主要是通过响应体获取网页的源代码、JSON数据等,然后从中提取相应的内容。使用http请求库向服务器发送请求,然后获取响应,将响应体中的内容取下来,然后解析得到我们的数据。2.案例实现找到目标URL发送网络请求获取数据过滤数据保存数据importrequestsimportpprint#统一替换#1.选择要替换的内容#2.按住Ctrl+R注意:点亮星号*/点击2021版BrightRegex#3.在第一个框中输入(.*?):(.*)#4.在第二个框中输入'$1':'$2',#5.点击REPLACEALLheaders={'cookie':'','referer':'https://weibo.com/tv/channel/4379160563414111/editor','user-agent':'',}data={'data':'{"Component_Channel_Editor":{"cid":"4379160563414111","count":9}}'}url='https://www.weibo.com/tv/api/component?page=/tv/channel/4379160563414111/editor'json_data=requests.post(url=url,headers=headers,data=data).json()ccs_list=json_data['data']['Component_Channel_Editor']['list']next_cursor=json_data['data']['Component_Channel_Editor']['next_cursor']forccsinccs_list:oid=ccs['oid']title=ccs['title']data_1={'data':'{"Component_Play_Playinfo":{"oid":"'+oid+'"}}'}#1.F找到目标URLurl_1='https://weibo.com/tv/api/component?page=/tv/show/'+oid#2.发送网络请求#2.1构造请求头#2.2构造请求参数#3.获取数据json_data_2=requests.post(url=url_1,headers=headers,data=data_1).json()#4.过滤数据dict_urls=json_data_2['data']['Component_Play_Playinfo']['urls']video_url="https:"+dict_urls[list(dict_urls.keys())[0]]print(title+"\t"+video_url)#5.保存数据video_data=requests.get(video_url).contentwithopen(f'video\{title}.mp4',mode='wb')asf:f.write(video_data)print(title,"爬取成功...")兄弟送个女朋友,冲鸭~