此次完成抓取今日头条动漫图片,并将图片保存在本地。最后结果如下:


分析

打开今日头条首页搜索“动漫”,查看源代码我们会发现只包含少量的HTML,所以可以判断页面是AJAX加载的。打开开发者工具查看AJAX请求:

可以发现首次加载时的接口为:

https://www.toutiao.com/search_content/?offset=0&format=json&keyword=动漫&autoload=true&count=20&cur_tab=1&from=search_tab

滚动触发AJAX请求,第二次加载时的接口为:

https://www.toutiao.com/search_content/?offset=20&format=json&keyword=动漫&autoload=true&count=20&cur_tab=1&from=search_tab

可以发现规律,每次加载都是增加offset的值,步长为20。
查看加载的json数据可以获得标题信息和详情页地址。

我们获得详情页链接后再次发送请求进而获得每张图片的地址。

在详情页中不是通过AJAX加载的。我们查看源代码可以发现关于页面信息的蛛丝马迹。我们直接获取源代码后再通过正则匹配即可。

代码实现

from urllib.parse import urlencode
from hashlib import md5
import requests
import re
import osheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}  # 伪装成浏览器
def get_summary_data(url):'''根据url获取json数据:param url: 请求地址:return: json形式数据'''try:resp = requests.get(url,headers=headers)if resp.status_code == 200:print('获取到索引页数据')return resp.json()except requests.RequestException as e:print('获取索引页数据失败')def get_details_data(url):'''获取图片源地址:param url: 文章链接:return:'''try:response = requests.get(url,headers=headers)if response.status_code == 200:html = response.textreturn parse_details_data(html)except requests.RequestException as e:print('抓取失败')
def parse_data(json):'''解析json数据:param json: json数据:return: 生成器'''if json:items = json.get('data')#获取所有加载的数据for item in items:title = item.get('title')#获取标题if title==None:continuearticle_url = item.get('article_url')#获取文章链接picUrl = get_details_data(article_url)if picUrl !=None:data = {}data['title'] = titledata['imgs'] = picUrlyield datadef is_link(link):return link.startswith('http')def parse_details_data(html):pat = '<script>var BASE_DATA = .*?articleInfo:.*?content:(.*?)groupId.*?;</script>'match = re.search(pat,html,re.S)if match!=None:img_lists = list(filter(is_link,re.compile('&quot;(.*?)&quot;').findall(match.group(1))))#使用该正则会匹配到其他值,所有进行过滤return img_listsdef save_img(path,datas):'''将图片保存到文件夹中'''for data in datas:title = data.get('title')print('正在下载==='+title)if not os.path.exists(path):os.mkdir(path)if not os.path.exists(path+title):os.mkdir(path+title)for url in data.get('imgs'):if url ==None:continueresp = requests.get(url)if resp.status_code == 200:pic_path = '{0}/{1}.{2}'.format(path+title,md5(resp.content).hexdigest(),'jpg')if not os.path.exists(pic_path):with open(pic_path,'wb') as file:file.write(resp.content)else:print('已下载!')print('=================下载完成!=============')def main(keyword,offset):params = {'offset':offset,'format':'json','keyword':keyword,'autoload':'true','count':20,'cur_tab':1}url = 'https://www.toutiao.com/search_content/?'+urlencode(params)data = get_summary_data(url)data = parse_data(data)save_img('F:/今日头条/',data)if __name__=='__main__':for offset in range(80,100,20):print('=================================正在爬取,offset=%s'%offset)main('动漫',offset)print('=========================================================')

今日头条的爬取大概是这样的了,爬美女图片也是类似的。分析分析吧!

(廿五)Python爬虫:抓取今日头条图片相关推荐

  1. python爬虫—— 抓取今日头条的街拍的妹子图

    AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 近期在学习获取j ...

  2. 利用Ajax爬取今日头条头像,街拍图片。关于崔庆才python爬虫爬取今日头条街拍内容遇到的问题的解决办法。

    我也是初学爬虫,在看到崔庆才大佬的爬虫实战:爬取今日头条街拍美图时,发现有些内容过于陈旧运行程序时已经报错,网页的源代码早已不一样了.以下是我遇到的一些问题. 1.用开发者选项筛选Ajax文件时预览看 ...

  3. python爬今日头条组图_python 爬虫抓取今日头条街拍图片

    1. 打开google浏览器,输入www.toutiao.com, 搜索街拍.html 2.打开开发者选项,network监看加载的xhr, 数据是ajax异步加载的,能够看到preview里面的da ...

  4. python爬虫爬取今日头条_Python爬虫实战入门五:获取JS动态内容—爬取今日头条...

    之前我们爬取的网页,多是HTML静态生成的内容,直接从HTML源码中就能找到看到的数据和内容,然而并不是所有的网页都是这样的. 有一些网站的内容由前端的JS动态生成,由于呈现在网页上的内容是由JS生成 ...

  5. python爬虫爬取今日头条_python 简单爬取今日头条热点新闻(一)

    今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的: 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式netwo ...

  6. python爬虫爬取今日头条_爬取今日头条头条号文章数据

    0,背景介绍 最近想爬取一些今日头条的文章浏览数据,分析哪些头条号做的好,那些做的不好. 今日头条 比如上图的阅读数,评论数以及文章标题,通过这些数据进行分析. 于是展开了艰难的爬虫探索之旅 第一目标 ...

  7. python爬虫-爬取今日头条(图集)

    1.工具使用 python的request包和json包 fiddle抓包工具 2.请求分析 我们访问该页面,抓取请求,得到如下结果. 不难发现,在图片加载之前数据量最大的就是search_conte ...

  8. Python 爬虫: 抓取花瓣网图片

    接触Python也好长时间了,一直没什么机会使用,没有机会那就自己创造机会!呐,就先从爬虫开始吧,抓点美女图片下来. 废话不多说了,讲讲我是怎么做的. 1. 分析网站 想要下载图片,只要知道图片的地址 ...

  9. Python爬虫抓取指定网页图片代码实例

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 高州阳光论坛https://www.hnthzk.com/ 想 ...

最新文章

  1. mysql 唯一索引_MySQL学会用索引,让你数据库的查询速度起飞
  2. 保守的机器学习如何拯救日新月异的我们
  3. Execute Process Task
  4. 中文整合包_MIMOSA2: 基于微生物组和代谢组数据的整合分析
  5. java中数组的定义
  6. 程序win10_win10该文件没有与之关联的程序来执行操作
  7. 互联网人理想假期VS现实假期
  8. 批量导入时间oracle excel,读取Excel数据、批量导入到Oracle数据库
  9. intelj idea安装和配置
  10. 使用百度富文本编辑器UEditor碰到的问题
  11. 7820X+RTX2080Ti(Ubuntu 18.04)新机配置记录
  12. 福建金森重组_立案调查11个月面纱揭开 福建金森重组涉嫌造假
  13. CS5211替代LT7211B参数特性与优势|DP转LVDS方案
  14. 前端优化之二 图片优化——质量与性能的博弈
  15. python股票编程_Python爬虫回测股票的实例讲解
  16. 一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。
  17. USACO--3.2Feed Ratios
  18. 用matlab绘制分段函数曲线
  19. 2019年3月菜鸟实习生电话面试题
  20. java 字体选择器_常见CSS3选择器和文本字体样式汇总

热门文章

  1. 弹跳机器人 桌游_《碰撞机器人 Ricochet Robots 》介绍
  2. 余生很短,请珍惜 珍护 珍重
  3. Visio 2016去掉页边距(图形四周的空白区域)的解决办法 (适用于适应绘图)
  4. NetFPGA-SUME10G以太网接口仿真问题
  5. 物流是如何用计算机管理的,物流管理期末复习题
  6. LaTex关于数学公式的使用(11)--- 单位
  7. STM32cubeide代码自动补全教程
  8. php正则中英文数字,PHP正则匹配中英文、数字及下划线方法
  9. 聊一聊DDR3中的ODT(On-die termination)
  10. 08-HTML5详解(二)