作者信息:

Author : 黄志成(小黄)

博客地址: 博客

呐,这是一篇福利教程.为什么这么说呢.我们要爬取的内容是美图网站(嘿嘿,老司机都懂的)

废话不多说.开始今天的表演.

这个图集网站不要问我怎么来的.绝对不是我刻意找的.(其实是看了别的发的一篇文章,就想自己动手实现一下)

我们今天的任务就是 将这些图集保存下来。

首先我们需要获取到所有的列表,我们往下拉动滚动条,拉到底,会继续自动加载内容,我们通过浏览器的NetWork可以发现请求的数据包

我们来分析一下这个数据包

URL:https://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E6%B8%85%E7%BA%AF%E7%BE%8E%E5%A5%B3&autoload=true&count=20&cur_tab=3&from=gallery

通过url我们可以知道几个重要的参数

offset 偏移量

count 数量

cur_tab 当前分类

这里很多朋友可能对偏移量不太了解,这里我用sql语句表示一下,如果了解sql的朋友 肯定就知道了

mysql> SELECT * FROM art LIMIT offset , count

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15

mysql> SELECT * FROM table LIMIT 95,1; // 检索记录行 96

这里我每次读取一条,对一条进行操作.

URL:https://www.toutiao.com/search_content/?offset=1&format=json&keyword=%E6%B8%85%E7%BA%AF%E7%BE%8E%E5%A5%B3&autoload=true&count=1&cur_tab=3&from=gallery

每次对offset 进行自增即可了

我们点击进去 看看数据的结构.

我们需要获取到该图集的链接。

进入这篇图集,在NetWork中并没有发现图集有关的请求接口,可能也是混排的.

我们可以查看页面的源码

原来真的是混排的写法.看了一下这里用到vue.具体怎么实现的我们不去探讨了,我们只需要取出数据即可。

那如何取出呢? 提供两种方法,一种就是正则,一种就是自己写一个取文本的函数.这里我用第二种作为演示,下面是取文本的函数.

def txt_wrap_by(start_str, end, html):

start = html.find(start_str)

if start >= 0:

start += len(start_str)

end = html.find(end, start)

if end >= 0:

return html[start:end].strip()

我们取出 JSON.parse("") 中的数据

观察数据,可以发现 我们取出 url 就可以了,这里的数据是json但是被转义了,我们就通过正则取出吧

正则的语法如图上,最后我也会放出所有代码滴,大家放心.

然后保存为图片即可~

上面说的都是思路,最后放出代码~

import requests,os,json,re,datetime

# 主函数

def main():

foreach_art_list()

def foreach_art_list():

# 判断目录下是否存在jilv.txt文件 如果存在则读取里面的数值

if os.path.exists('./jilv.txt'):

f = open('./jilv.txt')

n = f.read()

n = int(n)

f.close()

else:

n = 1

while True:

url = 'http://www.toutiao.com/search_content/?offset=' + str(n) + '&format=json&keyword=%E6%B8%85%E7%BA%AF%E7%BE%8E%E5%A5%B3&autoload=true&count=1&cur_tab=3&from=gallery'

re = requests.get(url)

data = re.json()['data']

if not data:

break

# 运行图片下载函数

download_pic(data[0]['article_url'],n)

n = n+1

# 将n写入文件 防止程序运行出错 可以继续运行

with open('./jilv.txt', 'w') as f:

f.write(str(n))

def download_pic(url,n):

download_pic_url = 'http://p3.pstatp.com/'

# 这里必须带上协议头,否则会请求失败

header = {

'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'

}

res = requests.get(url,headers = header)

content = res.text

img_list_json = txt_wrap_by('gallery: JSON.parse("','"),',content)

# 正则获取所有的uri

img_list = re.findall(r'uri\\":\\"(.*?)\\"',img_list_json)

#判断是否有此目录

if 'img' not in os.listdir('.'):

os.mkdir('./img')

if str(n) not in os.listdir('./img'):

os.mkdir('./img/'+str(n))

for v in img_list:

img_path = download_pic_url + v

img_path = img_path.replace("\\", "")

# 读取图片

atlas = requests.get(img_path).content

# 保存图片

with open( './img/' + str(n) + '/' + str(datetime.datetime.now()) +'.jpg', 'wb') as f: # 把图片写入文件内

f.write(atlas)

# 取出两个文本之间的内容

def txt_wrap_by(start_str, end, html):

start = html.find(start_str)

if start >= 0:

start += len(start_str)

end = html.find(end, start)

if end >= 0:

return html[start:end].strip()

# 运行程序

main()

最后 展示一下 运行结果:

这个程序还有许多不完善的地方,我会在之后教程加入 redis 和 多线程 的写法,让他成为最快的爬虫~

敬请期待~ 今天就到这里了. 又是周末!祝大家周末愉快。嘿嘿~ 看我的美图去了。

用python写一个简单的爬虫_用Python编写一个简单的爬虫相关推荐

  1. python 写数据库几万条_使用 Python 处理3万多条数据只要几秒钟

    应用场景:工作中经常遇到大量的数据需要整合.去重.按照特定格式导出等情况.如果用 Excel 操作,不仅费时费力,还不准确,有么有更高效的解决方案呢? 本文以17个 txt 文本,3万多条数据为例,使 ...

  2. python写打开的excel 冲突_在Python中打开excel文件时出错

    嗨,我对python很陌生,这里我试图用python代码打开xls文件,但它显示了一些错误,如下所示.在 代码:from xlrd import open_workbook import os.pat ...

  3. 用python写个程序送给女朋友_用 Python 哄女朋友开心!你觉得可行嘛?

    有趣的程序媛 返回主页头条号发文规范 文章 微头条 图集 小视频 问答 下划线 代码块 备注 19 / 30 有了女朋友,可相处起来总是磕磕碰碰. 有时候,很想关心她,但是你太忙了,以至于她一直抱怨, ...

  4. 用python写脚本筛选原创微博_基于python编写的微博应用

    本文实例讲述了基于python编写的微博应用,分享给大家供大家参考.具体如下: 在编写自己的微博应用之前,先要到weibo开放平台申请应用的公钥和私钥. 下载python版的SDK,打开example ...

  5. python写dnf游戏脚本辅助_利用Python自动化操作鼠标键盘刷金币,工作室都靠这种脚本搬砖!...

    不管是英雄联盟还是王者荣耀,总是有一个特殊的模式可以用来刷金币,为什么说是特殊模式呢?因为打的都是人机,或者并不影响游戏平衡,被其它玩家举报,同时你这种模式的战绩也没人去看你的. 如果能利用Pytho ...

  6. python写五子棋游戏下载大全_用Python写五子棋游戏

    开端 开端 画棋盘 首先肯定是要画出棋盘来,用pygame画出一个 19 × 19 或 15 × 15 的棋盘并不是什么难事,这在之前的文章中已经多次用到,就不赘述了. 画棋子 需要说一下的是画棋子, ...

  7. python写手机脚本脱离电脑_让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行...

    本节目录 1. 一些传统的方法2. 将程序的代码生成二维码图片3. 使用手机扫描生成的二维码,并将其转化为py脚本 前言 最手机上写脚本是一件每场辛苦的事情,虽然SL4A人性化的为我们提供了API快速 ...

  8. python写双色球的开发语言_用python编写双色球软件?

    写了个双色球所有可能的组合和次数统计 # -*- coding=utf-8 -*- num = 0 ssq = [] for i in range(1,34): print "....[运行 ...

  9. python写安卓app控制蓝牙_基于python实现蓝牙通信代码实例

    这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 安装和示例 linux下安装 sudo apt ...

  10. python对土木工程有需要吗_自学python需要注意的问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Python确实容易上手,对初学者的门槛很低. 但是对于小白真正的门槛在于系统知识,这就和用什么语言完全没有任何关系了. 你不能让一个才会写print函数 ...

最新文章

  1. 大成郡亮相乐居春季房展精装户型16500元
  2. 评估指标:混淆矩阵、PR、mAP、ROC、AUC
  3. 关于大型asp.net 应用系统的架构 —— 如何做到高性能高可伸缩性[转]
  4. python调换字符串顺序_python实现指定字符串交换
  5. git使用的基本流程_git命令的基本使用
  6. [渝粤教育] 中国地质大学 国际贸易理论 复习题 (2)
  7. Web Hacking 101 中文版 十六、模板注入
  8. C++新特性探究(六):auto
  9. Eviews 9.0新功能——估计方法(ARDL、面板自回归、门限回归)
  10. sublime自定义snippet代码片段
  11. nginx 反向代理到目录
  12. html代码快速生成
  13. 路径规划与优化学习系列(一)---路径规划算法
  14. 台式计算机有哪些硬件,台式机包括什么
  15. 相似度融合网络:用于聚合不同的基因数据类型:Similarity network fusion for aggregating data types on a genomic scale
  16. 计算机基础知识还有那些,关于电脑基础知识有哪些
  17. spanning-tree portfast default
  18. B-S架构和C-S架构区别
  19. Ubuntu 设置合上笔记本盖子休眠的方法
  20. 南卡和三星蓝牙耳机哪个戴着舒服?佩戴舒适的蓝牙耳机推荐

热门文章

  1. ELK 之二:ElasticSearch 和Logstash高级使用
  2. uniapp的目录结构反思与整理 app.vue【base】pages.json【配置】main.json【框架入口文件】
  3. Redis给PHP安装redis扩展
  4. PHP学级与年级的转换函数_PHP addslashes()和stripslashes():字符串转义与还原
  5. mysql自定义多选排序_前端框架(二)DIV多选复选框框的封装和MySql数据库存取...
  6. 重庆邮电大学计算机2019湖北分数线,重庆邮电大学2019各省高考录取分数线 投档分数线是多少...
  7. php比较float大小,PHP中两个float(浮点数)比较实例分析
  8. 三极管工作原理_4种集电极-基极负反馈式三极管偏置电路的工作原理分析
  9. 抖音计算机音乐你要我,抖音上很火的我要你快乐我要你快乐是什么歌?
  10. linux中,项目生成的文件的权限为-rw-r-----