今天我们来爬取今日头条图集,老司机以街拍为例。

运行平台: Windows

Python版本: Python3.6

IDE: Sublime Text

其他工具: Chrome浏览器

1、网页分析

从打开今日头条首页,搜索“街拍”,下面有四个标签页“综合”、“视频”、“图集”和“用户”,我们依次点击几个标签,页面虽然变化了,但是地址栏的网址并没有变化,说明网页内容是动态加载的。

按“F12”调出Developer Tools,并刷新页面,接下来分析Developer Tools:

①:点击Network

②:选择XHR

③:找以“?offset=“开头的一项并点击,右侧出现详情

④:点击右侧“Header”标签页

⑤:看到请求方式和请求地址

⑥:此处为请求的参数

接下来点击Preview标签页查看返回的数据:

返回数据格式为json,展开“data”字段,并展开第一项,查找“title”,可以看到和网页第一个图集标题一致,说明找对地方了。

继续分析,“data”第一项里有一个“image_detail”字段,展开可以看到6项,并且每一项都有一个url,一看就是图片网址,不知是不是我们要找的,将该url复制到浏览器打开确实和第一张缩略图一样,那么这6个是不是该图集中所有的图像呢?

点击网页第一个图集,可以看到确实只有6张图片,而且与返回json数据中的图片一致。

到这里分析完了吗?我们看一下网页中除了图片,文字和相关推荐占了那么多内容,图片显得有点小,我们在图片上右击选择“在新标签页中打开图片”,注意看地址栏:

发现其中奥秘了吗?图片地址“large”变成了“origin”,将两个图片分别保存,比较一下大小,origin比large大很多,这才是我们需要的,至此,网页分析全部完成,接下来开始写代码。

2、代码

采用requests库进行抓取,由于前面分析已经很详细,代码就不分开讲解,请看注释内容

#-*- coding: utf-8 -*-

import os

import re

import json

import requests

from urllib.parse import urlencode

def get_one_page(offset, keyword):

'''

获取网页html内容并返回

'''

paras = {

'offset': offset, # 搜索结果项开始的位置

'format': 'json', # 返回的数据格式

'keyword': keyword, # 搜索的关键字

'autoload': 'true', # 自动加载

'count': 20, # 每次加载结果的项目数

'cur_tab': 3, # 当前的tab页索引,3为“图集”

'from': 'gallery' # 来源,“图集”

}

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

url = 'https://www.toutiao.com/search_content/?' + urlencode(paras)

try:

# 获取网页内容,返回json格式数据

response = requests.get(url, headers=headers)

# 通过状态码判断是否获取成功

if response.status_code == 200:

return response.text

return None

except RequestException:

return None

def parse_one_page(html):

'''

解析出组图网址,并将网页中所有图集的标题及图片地址返回

'''

urls = []

data = json.loads(html)

if data and 'data' in data.keys():

for item in data.get('data'):

page_urls = []

title = item.get('title')

image_detail = item.get('image_detail')

for i in range(len(image_detail)):

# 获取large图片地址

url = image_detail[i]['url']

# 替换URL获取高清原图

url = url.replace('large', 'origin')

page_urls.append(url)

urls.append({'title': title,'url_list': page_urls})

return urls

def save_image_file(url, path):

'''

保存图像文件

'''

ir = requests.get(url)

if ir.status_code == 200:

with open(path, 'wb') as f:

f.write(ir.content)

f.close()

def main(offset, word):

html = get_one_page(offset, word)

urls = parse_one_page(html)

# 图像文件夹不存在则创建

root_path = word

if not os.path.exists(root_path):

os.mkdir(root_path)

for i in range(len(urls)):

print('---正在下载 %s'%urls[i]['title'])

folder = root_path + '/' + urls[i]['title']

if not os.path.exists(folder):

try:

os.mkdir(folder)

except NotADirectoryError:

continue

except OSError:

continue

url_list = urls[i]['url_list']

for j in range(len(url_list)):

path = folder + '/index_' + str("%02d"%j) + '.jpg'

if not os.path.exists(path):

save_image_file(urls[i]['url_list'][j], path)

if __name__ == '__main__':

# 抓取2000个图集,基本上包含全部图集

for i in range(100):

main(i*20, '街拍')

可以根据自己喜好替换关键词下载你喜欢的图集。

用python爬取今日头条上的图片_Python爬虫:抓取今日头条图集相关推荐

  1. python爬虫抓取百度图片_Python爬虫抓取百度的高清摄影图片

    成果预览: 源代码: import requests import re url = 'https://image.baidu.com/search/index' headers = { 'User- ...

  2. python爬取大众点评评论_python爬虫抓取数据 小试Python——爬虫抓取大众点评上的数据 - 电脑常识 - 服务器之家...

    python爬虫抓取数据 小试Python--爬虫抓取大众点评上的数据 发布时间:2017-04-07

  3. python爬虫爬取股票软件数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储(转载)...

    完整代码 实际上,整个事情完成了两个相对独立的过程:1.爬虫获取网页股票数据并保存到本地文件:2.将本地文件数据储存到MySQL数据库.并没有直接的考虑把从网页上抓取到的数据实时(或者通过一个临时文件 ...

  4. python抓取数据库数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储...

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

  5. python爬虫实现股票数据存储_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

  6. python爬虫资源大全_Python爬虫抓取纯静态网站及其资源(基础篇)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:程序员宝库 **( 想要学习Python?Python ...

  7. python爬虫app步骤_Python爬虫抓取手机APP的传输数据,python爬虫抓取app

    Python爬虫抓取手机APP的传输数据,python爬虫抓取app 大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1. ...

  8. python唐诗分析综合_Python爬虫抓取唐诗宋词

    一 说明 Python语言的爬虫开发相对于其他编程语言是极其高校的,在上一篇文章 爬虫抓取博客园前10页标题带有Python关键字(不区分大小写) 的文章中,我们介绍了使用requests做爬虫开发, ...

  9. pythonapp爬虫库_python爬虫抓取app列表的图标

    python爬虫抓取app列表的图标 爬虫简介 所谓的爬虫简单来说,就是通过不断的变化http请求的url,向服务器进行请求,从而获得服务器返回的相关数据,在这些数据中提取对自己有用的信息. 爬虫的步 ...

最新文章

  1. 解决“安装程序无法定位现有系统分区,也无法创建新的系统分区”的方法
  2. 最新!百度首发 OCR 自训练平台 EasyDL OCR
  3. java自定义监听器例子_Spring 实现自定义监听器案例
  4. 成功解决Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
  5. Java设计模式百例(番外) - Java的clone
  6. Win8下的SAP安装初体验
  7. Android PopupWindow 隐藏软键盘的方法
  8. 根文件系统构建(Buildroot 方式)
  9. Python lambda函数demo
  10. 插件显示缩进_硬核,这 3 款 IDE 插件让你的代码牢不可破
  11. ubuntu yum安装_ubuntu 制作本地yum仓库
  12. python中的 __getattr__ __setattr__ __getitem__ __add__
  13. Merge PDF - Split PDF(PDF合成)
  14. .NET简谈分层架构思想(彻底分离每个层)
  15. 日志系统模块基础、C语言实现一个日志模块、zlog日志模块基础
  16. python实现文本翻译
  17. wps里的超链接PDF打不开_PDF转Word都可以怎样操作?
  18. 新鑫工具箱(微信小程序)
  19. 原来ChatGPT可以充当这么多角色
  20. 15数字华容道解法 图解_华容道解法图

热门文章

  1. 阿里云物联网平台测试知识点梳理
  2. html和cs、js、jq 基础用法
  3. execl筛选去重_excel表格如何去除重复数据进行筛选
  4. python相关性分析函数_python实现相关性分析
  5. [gdc13]古墓丽影DirectX11技术
  6. 【面试被虐】如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?
  7. 品味奢华 匠心独韵——飞利浦Fidelio T1设计与声音的哲学
  8. 让 Odoo POS 支持廉价小票打印机
  9. 大数据可视化大屏展示
  10. 接口测试——postman和Jemter