主要内容

  • 进入今日头条https://www.toutiao.com/
  • 按F12进行数据分析,找到要爬取的内容
  • 根据获取的网页信息,编写代码
  • 一些模块的使用方法
  • 源代码展示
  • 打包成可执行程序exe

1.进入今日头条,按F12找到开发者工具,选择Network(网络),本文使用谷歌浏览器为例。

2.在搜索栏里输入搜索内容(也是我们后续要爬取的图片内容),点击搜索,观察开发者工具中Network的变化,找出有用的数据。

3.找到这条数据,可以看到请求头的一些信息,注意Query String Parameters的内容,与我们请求的网址(Request URL:)有关。


4.找到Preview,我们要找的数据都在这里!!!

5.找到data下的数据,随意打开一个,我们将看到这些信息,包括标题,文章链接,关键字,评论数量等很多信息。我们主要目的是爬取图片,因此image_list里面的数据才是我们最关心的。

我们要爬取图片的链接都在这里。

6.分析到这里,我们就可以写代码了。首先到入一些必要的模块。

import requests
from urllib.parse import  urlencode
import os
from hashlib import md5

requests模块用于请网页信息,获取网页;os模块主要用于文件创建,存取爬到的内容;hashlib模块用md5生成图片名;urlencode将字典形式的数据转化成查询字符串;

定义一个函数,用来获取一个页面的内容,传入两个参数,(offset,keyword),如果我们继续翻看网页,会发现有很多这样的数据。这两个参数就是获取这样的数据的,keyword是我们搜索的内容(关键字),用urlencode将params转化成字符串,并拼接成我们要访问的网址(Request URL:)。

def get_page(offset,keyword):params={'offset':offset,'format':'json','keyword':keyword,'autoload':'true','count':'20','cur_tab':'1','from':'search_tab'}#https://www.toutiao.com/search_content/?offset=60&format=json&keyword=%E8%BD%A6%E6%A8%A1&autoload=true&count=20&cur_tab=1&from=search_taburl='https://www.toutiao.com/search_content/?'+urlencode(params)response=requests.get(url)#500服务器内部错误,400错误请求(服务器找不到请求的语法) 404未找到if response.status_code==200:return response.json()

获取json数据,判断image_list是否存在,如果存在,遍历图片的链接,构造一个生成器。

def get_images(json):data=json.get('data')if data:for item in data:image_list=item.get('image_list')title=item.get('title')if image_list:for image in image_list:#构造一个生成器,将图片和标题一起返回yield {'image':image.get('url'),'title':title}

图片的存取:用title作为要存取图片的文件夹,创建文件夹,并用二进制文件写入图片。

def save_image(item):if not os.path.exists(item.get('title')):os.mkdir(item.get('title'))local_image_url=item.get('image')response=requests.get("http:"+local_image_url)if response.status_code==200:file_path='{0}/{1}.{2}'.format(item.get('title'),md5(response.content).hexdigest(),'jpg')#判断路径是否存在,如果不存在,写入if not os.path.exists(file_path):with open(file_path,'wb')as f:f.write(response.content)

定义一个offset数组,遍历,提取图片,下载

def main(offset,keyword):json=get_page(offset,keyword)for item in get_images(json):print(item)save_image(item)

完整代码

#coding=utf-8
import requests
from urllib.parse import  urlencode
import os
from hashlib import md5def get_page(offset,keyword):params={'offset':offset,'format':'json','keyword':keyword,'autoload':'true','count':'20','cur_tab':'1','from':'search_tab'}#https://www.toutiao.com/search_content/?offset=60&format=json&keyword=%E8%BD%A6%E6%A8%A1&autoload=true&count=20&cur_tab=1&from=search_taburl='https://www.toutiao.com/search_content/?'+urlencode(params)response=requests.get(url)#500服务器内部错误,400错误请求(服务器找不到请求的语法) 404未找到if response.status_code==200:return response.json()def get_images(json):data=json.get('data')if data:for item in data:image_list=item.get('image_list')title=item.get('title')if image_list:for image in image_list:#构造一个生成器,将图片和标题一起返回yield {'image':image.get('url'),'title':title}
#item就是get_image()返回的一个字典
#item里面的title创建一个文件夹
def save_image(item):if not os.path.exists(item.get('title')):os.mkdir(item.get('title'))local_image_url=item.get('image')response=requests.get("http:"+local_image_url)if response.status_code==200:file_path='{0}/{1}.{2}'.format(item.get('title'),md5(response.content).hexdigest(),'jpg')#判断路径是否存在,如果不存在,写入if not os.path.exists(file_path):with open(file_path,'wb')as f:f.write(response.content)#定义一个offset数组,遍历,提取图片,下载
def main(offset,keyword):json=get_page(offset,keyword)for item in get_images(json):print(item)save_image(item)
if __name__ == '__main__':keyword=input("请输入要爬取图片的关键词:")offset=input("请输入要爬取的数量:")main(offset,keyword)

为了使用方便,我们可以将我们的程序打包成可执行文件。这里我们使用pyinstaller这个模块。如果没有这个模块,可以使用pip install pyinstaller 安装。
安装方法
1.用cmd进入你要打包的python目录
2.输入pyinstaller 文件名.py回车即可
3.可执行文件在dist文件夹下

pyinstaller用法扩展:
-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-i 表示可执行文件的图标
–version-file file_version_info.txt :表示将标准版本信息文件的内容赋给exe文件的属性

python爬取今日头条图片相关推荐

  1. practice之Python爬取今日头条图片(正则表达式)

    导入所需的包(re,requests,json,os,urllib的request) import re import requests import json import os from urll ...

  2. python爬取今日头条专栏_[python3]今日头条图片爬取

    前言 代码设计流程,先模拟ajax发送搜索"街拍美女",提取返回json里面的article_url,再访问article_url,提取article_url响应的图片url,访问 ...

  3. 爬取今日头条图片(解决缩略图问题+MySQL)

    爬取今日头条图片 1. 引言 2. 分析 2.1 获取主页的url 2.2 获取当前页所有文章的链接 2.3 具体文章的信息 2.4 MySQL设置 3.代码 4. 效果 4.1 本地效果图 4.2 ...

  4. 用python爬取今日头条上的图片_Python爬虫:抓取今日头条图集

    今天我们来爬取今日头条图集,老司机以街拍为例. 运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome浏览器 1.网页分析 从 ...

  5. python爬取今日头条的文章_Python3爬取今日头条有关《人民的名义》文章

    Python3爬取今日头条有关<人民的名义>文章 最近一直在看Python的基础语法知识,五一假期手痒痒想练练,正好<人民的名义>刚结束,于是决定扒一下头条上面的人名的名义文章 ...

  6. 用Python爬取今日头条,里面的东西统统白送!

    近年来今日头条做的可谓是风生水起,自上线以来,围绕内容载体和分发方式两个维度不断丰富,至今已衍生出图文.视频.微头条.专栏.搜索.直播等多种内容形式.根据最新中国联通发布的App大数据排行榜,今日头条 ...

  7. python爬取今日头条街拍,Python3今日头条街拍爬虫

    学习了大才哥的在线视频教程,特来这里总结分享一下. 不同于上一篇糗事百科的爬虫,这里爬取今日头条街拍需要分析ajax请求得来的数据. 首先这里是爬取的起始页 可以看到当我们往下拉滚动条的时候,新数据是 ...

  8. 简单爬虫Ajax数据爬取——今日头条图片爬取

    一.Ajax简介 什么是Ajax? Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页 ...

  9. 用python爬取头条文章_AI第四课:Python爬取今日头条文章

    到目前为止,能使用python写一点简单的程序了,本次的任务是爬取今日头条的文章信息. 大致涉及的知识点:json数据格式,浏览器插件jsonView,浏览器开发者模式,html基础,http代理,h ...

最新文章

  1. Nat. Biotech. | AI、药物重定位和同行评审
  2. 李洋疯狂C语言之关于自增自减遇到的一些问题
  3. java servlet 调试日志 logger sae_java servlet 调试日志 lo
  4. zabbix监控mysql死锁
  5. apache 启用 gzip压缩
  6. Java韩顺平 | IO流专题 | 学习小记
  7. 堆的应用之优先级队列
  8. php在屏幕中间弹窗,屏幕中间弹框的一种写法
  9. 产品经理面试问题及答案大全《一》
  10. 复习用vue写tabbar
  11. 在word中公式后面插入标号的方法
  12. android 设置启动画面,修改Android开机画面
  13. 自定义函数 | R语言偏相关分析及绘图
  14. 驭势“AI司机”融入城市生活,服贸会抢“鲜”体验
  15. 下载kaggle数据集出现的一系列问题
  16. 乐鑫Esp32学习之旅 乐鑫 ESP-S2/S3 模组的实现 USB 无线网卡上网,为你的台式机装上无线WiFI上网吧。(附带源码)
  17. 小空间大精彩!Apple Watch重磅实战案例之QQ空间
  18. mactxt文件如何转换成html,PDF转换成HTML文档首选ABBYY Mac
  19. 润生集团2022年度业绩内部汇报 | 相信 · 热爱 · 创造
  20. 2018北邮网研机试

热门文章

  1. vue项目报错:warning Disallow self-closing on HTML void elements (<img/>)
  2. WebIDE 使用指南
  3. html显示svg图片,HTML5/CSS3系列教程:使用SVG图片
  4. 三分钟带你领路Java-JFrame窗体美化
  5. 从正射到倾斜,Mavic 3E详细使用报告
  6. Android实现隐藏手机底部虚拟按键
  7. spring源码构建时缺失spring-cglib-repack和spring-objenesis-repack的正确处理姿势
  8. led的伏安特性曲线 matlab实现_光电池伏安特性测试MATLAB制图程序
  9. 如何从“固定型”思维模式转化为“成长型”思维模式
  10. 外贸网站建设需要注意的事项