作者信息:

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爬虫入门教程(二):开始一个简单的爬虫

    2019/10/28更新 使用Python3,而不再是Python2 转载请注明出处:https://blog.csdn.net/aaronjny/article/details/77945329 爬 ...

  2. $python爬虫系列(1)——一个简单的爬虫实例

    本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容: 分析html ...

  3. 四句话让你学会一个简单的爬虫【python】

    首先我们先导入request库,这样才能调用requests里面的函数 os库是为了存放我们爬过来的文件 import requests import os 如何四句话实现一个简单的爬虫 pic = ...

  4. 用Tkinter打造自己的Python IDE开发工具(1)建立一个简单的代码编辑器

    用Tkinter打造自己的Python IDE开发工具(1)建立一个简单的代码编辑器 很多Python初学者,安装完Python后,已经包含了IDLE代码开发和调试系统.都会再安装各种Python开发 ...

  5. 基于列表框的简单选课窗体开发。编写Windows应用程序,设计实现一个简单选课系统,要求:(1)点击“添加”按钮,将把在第一文本框中的输入的课程名称添加到左边的列表框中,且所添加的课程不能为空,不能

    基于列表框的简单选课窗体开发.编写Windows应用程序,设计实现一个简单选课系统,要求: (1)点击"添加"按钮,将把在第一文本框中的输入的课程名称添加到左边的列表框中,且所添加 ...

  6. 网络爬虫笔记 :一个简单的爬虫框架

    学了两节课的 Python 爬虫,也算是入门了吧.敲了两天的案例代码之后,我突然发现,这些代码虽然功能不同,写法各异,但是终归是有章可循的,整体框架是一致的.所以我自己整理了一个简单的爬虫框架,适合初 ...

  7. Python爬虫不会?戳一下,小编一步步教你写一个简单的爬虫

    写在前面 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序.众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容. 优先申明:我们使用的py ...

  8. 用python写一个简单的爬虫_Python实现简易Web爬虫详解

    编辑推荐: 本文主要介绍了Python实现简易Web爬虫详解,希望对大家有帮助. 本文来自于脚本之家 ,由火龙果软件Alice编辑,推荐. 简介: 网络爬虫(又被称为网页蜘蛛),网络机器人,是一种按照 ...

  9. 用python写一个简单的爬虫保存在json文件中

    学习python没多久,所以只能写一个很简单的爬虫啦~~ 我使用annacada 自带的spyder来写爬虫的,这次我们要爬取得网站是http://www.drugbank.ca/drugs, 主要是 ...

  10. Python网络爬虫 - 一个简单的爬虫例子

    下面我们创建一个真正的爬虫例子 爬取我的博客园个人主页首页的推荐文章列表和地址 scrape_home_articles.py from urllib.request import urlopen f ...

最新文章

  1. 图解GPT-2(完整版)!
  2. MWC 2015:Peel全面升级为用户打造智能家居控制新体验
  3. Worksheet.get_Range Method
  4. 欧拉函数和最大公约数的组合应用
  5. 【迁移学习】隐私保护下的迁移算法
  6. [深度学习] Pytorch中RNN/LSTM 模型小结
  7. 2020最新版SpringMVC面试题高频精选
  8. @scheduled注解配置时间_@Scheduled注解
  9. java获取Timestamp类型的当前系统时间
  10. UVA11398 The Base-1 Number System【进制】
  11. 清华大学操作系统OS学习(九)——页面置环算法:最优算法、先进先出算法(FIFO)、最近最久未使用算法(LRU)、 CLOCK法、最不常用算法(LFU) 、工作集置换算法、缺页率置环算法
  12. lintcode:Search Insert Position 搜索插入位置
  13. POJ 1442 Black Box 优先队列
  14. Python2.7安装Numpy
  15. 双网卡设置一个外网一个内网(两张网卡同时上内外网设置)
  16. OK6410移植UBOOT
  17. 工业相机和镜头基础知识(转载)
  18. ps 打开失败 提示:暂存盘已满
  19. 六年开发者亲测,简单好用的「免费」APP内测托管平台
  20. 鸡为什么感染呼吸疾病 预防鸡流鼻涕打喷嚏的药

热门文章

  1. 倒排列表压缩算法汇总——分区Elias-Fano编码貌似是最牛叉的啊!
  2. MongoDB 3.0 WiredTiger Compression and Performance
  3. 一键安装MySQL5.6.43脚本
  4. codeforces 383D
  5. spring boot(八)RabbitMQ使用
  6. C#取整函数Math.Round、Math.Ceiling和Math.Floor
  7. 软件测试基础 - 测试覆盖率
  8. Marshal.ReleaseComObject
  9. 创建集成含有SQL Server 2008 RTM + Service Pack 1 的安装 (翻译)
  10. java and asp.net