爬取今日头条街拍美图

news/2024/12/22 15:22:03/

相关背景:

  1. 本篇文章是基于爬虫实践课程–分析Ajax请求并抓取今日头条街拍美图
  2. 其实我最开始也只想在CSDN上面找一篇文章看看结果都是分析没有实操,没办法最后只能自己写了,本篇文章里面的问题也是我遇到的问题。

 操作过程:

1.首先对今日头条的数据进行分析,我们可以轻易发现其中的图片内容是Ajax请求的,那么接下来我们打开Network中的Fetch/XHR,将今日头条的图片往下滑动加载新的图片,我们发现下拉过程中出现很多list打开这个我没有找到任何有用的数据继续下拉,出现search如下图开头的加载数据,打开他的响应,发现里面全是我们要找的图片的地址。

找到该条数据的负载里面的内容等会在写params的时候会用

 

2.接下来就是用python将数据爬下来 

首先导入接下来需要用到的包

import requests
import json
import os

 我们建一个类beauty_girl并且写入url,header,params私有属性,这里需要注意,header里面需要加入cookie,不加拿不到我们想要的数据。


class beauty_girl:def __init__(self,num):self.url='https://so.toutiao.com/search?'self.params={'keyword':'街拍美图','pd':'atlas','dvpf':'pc','aid':'4916','page_num':num,'search_json':'{"from_search_id": "202211211241230102121871694D7238FE", "origin_keyword": "街拍美图", "image_keyword": "街拍美图","_signal": "aHR0cHM6Ly9zZjMtdHRjZG4tdG9zLnBzdGF0cC5jb20vaW1nL3Rvcy1jbi1pLXF2ajJscTQ5azAvMzI1YjA4MGI4OTA2NDYyNGJhNWIyNmI1NWU4ZmEyMTF+Y3MuanBlZw=="}','rawJSON':'1','search_id':'202211211241260102121871694D72393D'}self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36','Cookie': 'msToken=fZ_kL6EYm65nmgLwajl7FuHJoMFlW1OpYK06fMov5og4dbrVGPDhm0LakLrv8pToPIjQmXmM_CmNIoeJnmwk_XaHcGQJ0VM3D3gt-w_oB5Y=; tt_webid=7146370447167997471; ttwid=1%7CNetI5FlsXWvIT6_sze0TpHWyERC-LY-h_x0FO6s4fTw%7C1669005678%7C9a1ac1000023e9cc9f0a0ff99b47f8217233a935f22268e6b5ed5ee1027afe31; _tea_utm_cache_4916=undefined; _S_WIN_WH=1536_754; _S_DPR=1.25; _S_IPAD=0; MONITOR_WEB_ID=7146370447167997471'}

 3.写入获取响应数据的方法,当正常访问时返回响应数据,不能访问时返回None

def get_resp_data(self):resp=requests.get(url=self.url,headers=self.headers,params=self.params)if resp.status_code==200:return resp.textelse:return None

4.写入获取url并且保存图片的方法

def get_url_set(self,data_list):#对json数据进行分析拿到有url的列表数据dict_data=json.loads(data_list)['rawData']['data']print(dict_data)for data in dict_data:#获取每张图片的urlnew_url=data['img_url']#给每个图片命名name=new_url.split('/')[-1]#拿到图片数据resp=requests.get(url=new_url,headers=self.headers).content#保存with open('./今日头条/'+name,'wb') as fp:fp.write(resp)print(new_url,'保存成功')

5.写一个启动方法

def run(self):#检查该层是否存在今日头条这个文件夹if not os.path.exists('./今日头条'):os.mkdir('./今日头条')resp=self.get_resp_data()print(resp)self.get_url_set(resp)

6.运行代码,说一下那个4,是我随便填的,代表我要获取网页加载4次的图片,自己想要多少图片自己填。

if __name__ == '__main__':for num in range(4):r1=beauty_girl(num)r1.run()

总结:

没什么好总结的总结的这篇文章本来就是哥们写着玩的,里面的东西也不难纯属哥们自娱自乐

下面是代码总结:

import requests
import json
import osclass beauty_girl:def __init__(self,num):self.url='https://so.toutiao.com/search?'self.params={'keyword':'街拍美图','pd':'atlas','dvpf':'pc','aid':'4916','page_num':num,'search_json':'{"from_search_id": "202211211241230102121871694D7238FE", "origin_keyword": "街拍美图", "image_keyword": "街拍美图","_signal": "aHR0cHM6Ly9zZjMtdHRjZG4tdG9zLnBzdGF0cC5jb20vaW1nL3Rvcy1jbi1pLXF2ajJscTQ5azAvMzI1YjA4MGI4OTA2NDYyNGJhNWIyNmI1NWU4ZmEyMTF+Y3MuanBlZw=="}','rawJSON':'1','search_id':'202211211241260102121871694D72393D'}self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36','Cookie': 'msToken=fZ_kL6EYm65nmgLwajl7FuHJoMFlW1OpYK06fMov5og4dbrVGPDhm0LakLrv8pToPIjQmXmM_CmNIoeJnmwk_XaHcGQJ0VM3D3gt-w_oB5Y=; tt_webid=7146370447167997471; ttwid=1%7CNetI5FlsXWvIT6_sze0TpHWyERC-LY-h_x0FO6s4fTw%7C1669005678%7C9a1ac1000023e9cc9f0a0ff99b47f8217233a935f22268e6b5ed5ee1027afe31; _tea_utm_cache_4916=undefined; _S_WIN_WH=1536_754; _S_DPR=1.25; _S_IPAD=0; MONITOR_WEB_ID=7146370447167997471'}def get_resp_data(self):resp=requests.get(url=self.url,headers=self.headers,params=self.params)if resp.status_code==200:return resp.textelse:return Nonedef get_url_set(self,data_list):#对json数据进行分析拿到有url的列表数据dict_data=json.loads(data_list)['rawData']['data']print(dict_data)for data in dict_data:#获取每张图片的urlnew_url=data['img_url']#给每个图片命名name=new_url.split('/')[-1]#拿到图片数据resp=requests.get(url=new_url,headers=self.headers).content#保存with open('./今日头条/'+name,'wb') as fp:fp.write(resp)print(new_url,'保存成功')def run(self):#检查该层是否存在今日头条这个文件夹if not os.path.exists('./今日头条'):os.mkdir('./今日头条')resp=self.get_resp_data()print(resp)self.get_url_set(resp)if __name__ == '__main__':for num in range(4):r1=beauty_girl(num)r1.run()


http://www.ppmy.cn/news/837463.html

相关文章

apache 安装配置 基础篇(三) 之 虚拟机、主服务等、默认虚拟主机

apache虚拟主机类型有两种 1、基于名称的虚拟主机 2、基于地址或IP地址的虚拟主机 基于名称的虚拟主机 ## httpd-vhosts.conf 添加如下代码, ## 同时要在httpd.conf中追加监听89端口 Listen 89 ## 修改apache 文件要 在bin路径下面的cmd 录入 httpd -t 检测 代…

Node.js开发

Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。 也就是说Node.js基于V8引擎来执行JavaScript的代码,但是不仅仅只有V8引擎:  前面我们知道V8可以嵌入到任何C 应用程序中,无论是Chrome还是Node.js,事实上都是嵌入…

最近作家六六说京东卖假货,我现在就展示一个京东欺骗消费者的真实情况吧

大概的说说情况吧,我在京东上面,买了两本绝版书,第一本,卖家说没货了,让我申请退款,我就申请退款了,后来我搜了一下之前还挂了有的两三家突然全部下架了,然后我又买了另外一本绝版书…

Docker安装ElasticSearch8.X docker安装elasticsearch8.X完整详细教程

Docker安装ElasticSearch8.X docker安装elasticsearch8.X完整详细教程 Docker 上安装 ElasticSearch 8.8.1 的步骤:选择要安装的ElasticSearch 版本1、拉取 ElasticSearch 镜像2、创建并运行容器关闭容器启动容器重启容器 3、elasticsearch常用端口以及作用4、测试&…

京东返利

京东返利 买东西前查一查,说不定你要买的东西返利50%呢~ 正文开始,从现在开始 京东购买商品,可以在小花儿人工智能,以下简称“小花儿”这里领取返利了(O(∩_∩)O), 返利最多50% ,…

京东E卡回收方法

持有京东e卡还可以享受很多的优惠。这是京东商城发行的预付卡。如果您经常在京东自营店买东西,这张卡会为您节省很多费用,所以受到非常多用户的喜爱。京东e卡对于经常购物的人来说是一种福利,但对于一些平时很少在网上购买东西的人来说&#…

微信api退款及退款查询

相比支付宝的接口,微信的接口与实现都很简单其实,官方文档都有很详细的讲解。 官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter9_4 步骤: 1.下载 安全证书!!【关键】 2.按官方文…

极客日报第118期:京东被曝显卡售后不肯维修要原价退款;​IBM发布第一个2纳米芯片;Bootstrap 5.0.0发布

一分钟速览新闻点! 京东被曝显卡售后不肯维修要原价退款安阳女车主起诉特斯拉副总裁陶琳:请求精神损失赔偿 5 万腾讯正与美国谈判,以保留在 Riot 和 Epic 的股份街电、搜电完成合并,两大品牌母公司正式定名竹芒科技IBM 制造出第一…