本篇博客我们将爬取百度图片,输入搜索词,爬取与搜索词相关的图片。

首先打开搜狗图片https://pic.sogou.com/,比如搜索"猫",此时的URL如下:

https://pic.sogou.com/pics?query=%C3%A8&w=05009900&p=&_asf=pic.sogou.com&_ast=1563449302&sc=index&sut=8710&sst0=1563449302189

如果仅凭借URL来爬取的话,URL中需要体现出搜索词信息以及页数信息,所以我们需要使用下面这个URL(至于这个URL是怎么得到的,目前我也不清楚,先照搬):

https://pic.sogou.com/pics?query={}&mode=1&start={}&reqType=ajax&reqFrom=result&tn=0

其中第一个{}替换为搜索词,第二个搜索词替换为页数信息。

首先搭建程序主体框架:

import time
import requests
import os
from requests import RequestException
import jsondef get_page(url):passdef parse_page(html, count, word):passif __name__ == '__main__':word = '猫'  # 关键词page = 10  # 爬取的页数count = 0  #图片计数if not os.path.exists(word):os.makedirs(word)  # 建目录for i in range(page):url =  'https://pic.sogou.com/pics?query={}&mode=1&start={}&reqType=ajax&reqFrom=result&tn=0'.format(word,i*48)# 发送请求、获取响应html = get_page(url)# 解析响应 数据存储count = parse_page(html, count, word)time.sleep(1)

发送请求获取响应,编写get_page(url)函数:

def get_page(url):try:# 添加User-Agent,放在headers中,伪装成浏览器headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:response.encoding = response.apparent_encodingreturn responsereturn Noneexcept RequestException:return None

注意和之前不同,这里指返回response,因为在解析首页时,我们需要的是response.text;当获取图片URL爬取保存图片时,需要的是response.content。返回response,两次请求可以通用这个函数。

打开上面的链接,会发现他返回的是json格式的数据:

所有的图片信息都在items下,上图蓝色阴影代表一张图片的信息,内部都是由一些键值对组成,我们关心的是pic_url字段,他的值是图片真正的链接。所以,我们要先把图片的pic_url解析出来,然后再进行图片爬取,和保存。

解析响应,解析json数据,提取middleURL并保存,然后爬取pic_url,保存图片:


def parse_page(html, count, word):html = html.textif html:p = json.loads(html)['items']  # 转为json格式  提取items字段print(len(p))  # 图片数for i in p[:-1]:  # [0:5]前5张print(i['pic_url'])count = count + 1# 数据保存with open(word + '/' + word + '_url_搜狗.txt', 'a', encoding='utf-8') as f:f.write(i['pic_url'] + '\n')pic = get_page(i['pic_url'])if pic:with open(word + '/' + '搜狗_'+str(count) + '.jpg', 'wb') as f:f.write(pic.content)time.sleep(1)return count

完整代码:

import time
import requests
import os
from requests import RequestException
import jsondef get_page(url):try:# 添加User-Agent,放在headers中,伪装成浏览器headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:response.encoding = response.apparent_encodingreturn responsereturn Noneexcept RequestException:return Nonedef parse_page(html, count, word):html = html.textif html:p = json.loads(html)['items']  # 转为json格式  提取items字段print(len(p))  # 图片数for i in p[:-1]:  # [0:5]前5张print(i['pic_url'])count = count + 1# 数据保存with open(word + '/' + word + '_url_搜狗.txt', 'a', encoding='utf-8') as f:f.write(i['pic_url'] + '\n')pic = get_page(i['pic_url'])if pic:with open(word + '/' + '搜狗_'+str(count) + '.jpg', 'wb') as f:f.write(pic.content)time.sleep(1)return countif __name__ == '__main__':word = '猫'  # 关键词page = 10  # 爬取的页数count = 0  #图片计数if not os.path.exists(word):os.makedirs(word)  # 建目录for i in range(page):url =  'https://pic.sogou.com/pics?query={}&mode=1&start={}&reqType=ajax&reqFrom=result&tn=0'.format(word,i*48)# 发送请求、获取响应html = get_page(url)# 解析响应 数据存储count = parse_page(html, count, word)time.sleep(1)

Python爬虫实战 | (9) 爬取搜狗图片相关推荐

  1. Python爬虫实战之爬取网站全部图片(一)

    Python爬虫实战之爬取网站全部图片(二) Python爬虫实战之通过ajax获得图片地址实现全站图片下载(三) 一.获得图片地址 和 图片名称 1.进入网址之后 按F12  打开开发人员工具点击e ...

  2. Python爬虫实战之爬取糗事百科段子

    Python爬虫实战之爬取糗事百科段子 完整代码地址:Python爬虫实战之爬取糗事百科段子 程序代码详解: Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子.包含的信息 ...

  3. Python爬虫实战之爬取百度贴吧帖子

    Python爬虫实战之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的 ...

  4. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)

    在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...

  5. 携程ajax,Python爬虫实战之爬取携程评论

    一.分析数据源 这里的数据源是指html网页?还是Aajx异步.对于爬虫初学者来说,可能不知道怎么判断,这里辰哥也手把手过一遍. 提示:以下操作均不需要登录(当然登录也可以) 咱们先在浏览器里面搜索携 ...

  6. Python爬虫实战:爬取解放日报新闻文章

    上一篇<Python 网络爬虫实战:爬取人民日报新闻文章>发布之后,确实帮到了不少朋友. 前几天,我好哥们问我:我想爬另一个日报新闻网站,网页结构几乎跟人民日报几乎一模一样,但是我用你的那 ...

  7. 爬虫实践:爬取搜狗图片

    前言 本文中,将通过爬取搜狗图片为例,分析Ajax请求来抓取网页数据 (通过传入关键字,已达到爬取不同类型图片的目的) AJAX引擎其实是一个JavaScript对象,全写是 window.XMLHt ...

  8. python爬虫实践之爬取美女图片

    目录 概述 准备 所需模块 涉及知识点 运行效果 完成爬虫 1. 分析网页 2. 爬虫代码 概述 爬取妹子图网的美女图片. 准备 所需模块 time requests lxml 涉及知识点 pytho ...

  9. Python爬虫实战之 爬取全国理工类大学数量+数据可视化

    上次爬取高考分数线这部分收了个尾,今天咱们来全面爬取全国各省有多少所理工类大学,并简单实现一个数据可视化.话不多说,咱们开始吧. 第一步,拿到url地址 第二步,获取高校数据 第三步,地图可视化 第四 ...

最新文章

  1. 什么是分布式系统,如何学习分布式系统(转)
  2. 凌琦:物联网——一场正在发生的变革
  3. 21、Power Query-列文本格式处理
  4. 北斗导航 | 监测和减轻空间天气对GNSS应用的影响
  5. Qt Creator使用自定义字体
  6. Cube 技术解读 | 详解「支付宝」全新的卡片技术栈
  7. 神马搜索如何提升搜索的时效性?
  8. 改进的SVN的Commit权限控制
  9. 对口高考计算机vf试题,计算机对口升学模拟答案.doc
  10. Java线程池ThreadPoolExecutor的实例
  11. 【纪中集训】2019.08.10【省选组】模拟TJ
  12. 拟合公式_Graphpad Prism 8.0对散点图进行拟合
  13. python源码不需要编译成二进制代码_编译 Python 源代码
  14. 【多线程】 Future Callable 使用(线程池线程执行完,执行主线程)
  15. Angular.js学习笔记(1)
  16. 计算机网络通信过程问题解析
  17. 「开源资讯」浏览器中可以深度学习的框架Paddle.js 1.0 发布
  18. 双光耦开关电源电路图_光耦817应用电路图汇总(PC817光电耦合器/开关电源/TL431)...
  19. HelloWord你的第一个rainmeter皮肤
  20. 【签约】ManageEngine卓豪签约中国大饭店 | 智能解析日志、洞察威胁,提升数据安全合规性

热门文章

  1. 不创建临时变量交换两个数,这才是高手
  2. c语言十进制数转化为八进制十六进制,C语言:将十进制转化为八进制,十六进制...
  3. HTTPS学习之教你弄透到底什么是HTTPS
  4. kkksc03考前临时抱佛脚
  5. python运行启动报错解决方法_解决python运行启动报错问题
  6. Itools的简单使用
  7. 高等数学常用的泰勒级数
  8. 外贸B2B业务邮件标题主流撰写技巧-软件
  9. codeforces#324(div2) E. Anton and Ira 贪心
  10. RTSP协议,感觉还不错