最终目的:能通过输入关键字进行搜索,爬取相应的图片存储到本地或者数据库

首先打开百度图片的网站,搜索任意一个关键字,比如说:水果,得到如下的界面

分析:

1、百度图片搜索结果的页面源代码不包含需要提取的图片信息,需要借助Chrome调试工具(F12调出)分析请求的URL地址

2、图片显示页面没有翻页按钮,但是页面一直往下拉会生成新的图片,这是典型的AJAX数据

F12打开调试工具,刷新网页,点击选中Network选项卡中的XHR标签(这个标签加载的就是AJAX请求),此时只能看到一条loginfo开头的信息,字面上可以理解为和登录相关的内容,先不管它

把网页往下拖动,可以看到有新的信息加载出来

这些加载出来的都是以acjson开头的信息,点击之后查看Headers、Preview、Response标签,可以看出来这里面包含了我们需要的图片信息

对比一下这几条信息的headers中Request URL可以得出参数中有三个值在变化,一个psm,一个pn,还有一个14。。。开头的数字,经过测试可以发现,实际上pn的值是最关键的,它影响翻页,其他两个可有可无。(对比url建议用一些在线代码对比工具,要不然眼睛要瞎)

下面开始写代码:

一、请求网页,获取html文本(百度图片有防盗链,加个Referer)

#获取动态页面返回的文本

defget_page_html(page_url):

headers={'Referer': 'https://image.baidu.com/search/index?tn=baiduimage','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}try:

r= requests.get(page_url, headers=headers)if r.status_code == 200:

r.encoding=r.apparent_encodingreturnr.textelse:print('请求失败')exceptException as e:print(e)

二、使用正则表达式提取真实图片的地址(选的是小图,大图在objURL里,需要经过简单的解密)

#从文本中提取出真实图片地址

defparse_result(text):

url_real= re.findall('"thumbURL":"(.*?)",', text)return url_real

三、请求图片的url,返回content(图片信息需要以二进制写入)

#获取图片的content

defget_image_content(url_real):

headers={'Referer': url_real,'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}try:

r= requests.get(url_real, headers=headers)if r.status_code == 200:

r.encoding=r.apparent_encodingreturnr.contentelse:print('请求失败')exceptException as e:print(e)

四、保存图片(因为是测试,我写的是绝对地址,正常需要用相对地址)

#将图片的content写入文件

defsave_pic(url_real, content):

root= 'D://baiduimage//'path= root + url_real.split('/')[-1]if notos.path.exists(root):

os.mkdir(root)if notos.path.exists(path):

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

f.write(content)print('图片{}保存成功,地址在{}'.format(url_real, path))else:pass

五、定义一个主函数(百度图片每次最多请求30张,即使改了其他请求参数也最多60张)

#主函数

defmain():

keyword= input('请输入你要查询的关键字:')

'''

按照标准, URL 只允许一部分 ASCII 字符(数字字母和部分符号),其他的字符(如汉字)是不符合 URL 标准的。

所以 URL 中使用其他字符就需要进行 URL 编码。python3中使用urllib.parse.quote进行编码

'''

keyword_quote=urllib.parse.quote(keyword)

depth= int(input("请输入要爬取的页数(每页30张图):"))for i inrange(depth):

url= 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord+=&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&word={}&z=&ic=0&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&step_word={}&pn={}&rn=30&gsm=1e&1541136876386='.format(

keyword_quote, keyword_quote, i* 30)

html=get_page_html(url)

real_urls=parse_result(html)for real_url inreal_urls:

content=get_image_content(real_url)

save_pic(real_url, content)

六、最后写一个函数入口

#函数入口

if __name__ == '__main__':

main()

当然,实现整个过程最好是先把整体的框架写好,那样思路最清晰。

关于百度图片的爬取就到这里,源代码地址:传送门

python爬虫百度图片_python3爬取百度图片(2018年11月3日有效)相关推荐

  1. python爬虫之正则表达式练习——爬取百度图片

    1 明确需求,创建环境 ''' 第一步:明确需求,转换图片 需求:爬取百度图片中关于森林的图片,并保存 网址:https://image.baidu.com/search/index?tn=baidu ...

  2. 【python 爬虫】 scrapy 入门--爬取百度新闻排行榜

    scrapy 入门–爬取百度新闻排行榜 环境要求:python2/3(anaconda)scrapy库 开发环境:sublime text + windows cmd 下载scrapy(需要pytho ...

  3. python爬虫入门教程:爬取网页图片

    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的.而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程: 准备工作 语言:python IDE:py ...

  4. php爬去百度图片,python爬虫:随心所欲地爬取百度图片

    文章目录一.前言 二.需要导入的库 三.实现过程 1.下载链接分析 2.代码分析 3.完整代码 四.Blogger's speech 一.前言 之前爬取了很多静态网页的内容,包括:小说.图片等等,今天 ...

  5. python爬虫爬取百度图片,python爬虫篇2:爬取百度图片

    入门级 import requests import re import os from urllib import error def main(): dirPath = "E:\pyth ...

  6. python爬虫实战(一)~爬取百度百科人物的文本+图片信息+Restful api接口

    我的github地址:https://github.com/yuyongsheng1990/python_spider_from_bdbaike # -*- coding: UTF-8 -*- # @ ...

  7. python 爬取百度知道_python3爬取百度知道的问答并存入数据库(MySQL)

    一.链接分析: 以"Linux"为搜索的关键字为例: 首页的链接为:https://zhidao.baidu.com/search?lm=0&rn=10&pn=0& ...

  8. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片

    Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...

  9. 测试爬虫 爬取百度贴吧 爬取百度搜图图片

    测试爬取百度贴吧图片 定义爬取百度斗图吧首页的每条贴子的URL的爬取规则对象 /*** 斗图吧贴子的url*/SpiderFunction<Set<String>> doutu ...

最新文章

  1. 计算机精英协会考核题 —— 第一题:厄密多项式
  2. CMS之图片管理(2)
  3. InfoQ —— 腾讯游戏大数据服务场景与应用
  4. Windows 10正式版21H2更新:之后功能性更新将减为年更
  5. Android 推断当前Activity是不是最后一个Activity 以及 应用或Activity是否存在
  6. Django缓存设置
  7. OSPF:STUB与NSSA区别
  8. matlab画图的参数,matlab画图参数
  9. android tv 8 安装国内app,不花钱解决 Android TV 原生系统国内APP不显示图标
  10. 程序员内部培训与个人发展杂谈
  11. GSM+GPRS通信模块SIM800C介绍
  12. 手机APP测试——Perfecto
  13. AI丨亚马逊将在加州欧文地区测试其自动送货机器人Scout
  14. 三国志战略版:Daniel_张角分析
  15. 钢管车架管材的分级介绍 (zz)
  16. 单片机初学者电路常识
  17. 江南计算机研究所招聘物联网学院,江南大学:物联网工程学院培育物联网精英人才...
  18. 秒 毫秒 微秒 纳秒 皮秒。。时间单位换算
  19. 小区物业管理系统设计与开发论文
  20. springboot2.x 的 RedisCacheManager设置缓存失效时间

热门文章

  1. NSDate、NSTimeInterval、NSDateFormatter、NSLocale 、NSTimeZone、NSDateComponents详解
  2. 【2020腾讯游戏安全技术竞赛】PC方向初赛 WriteUp
  3. uni-app IOS 音乐无法自动播放
  4. 百度已拿到移动互联网船票
  5. 70后 80后 90后
  6. 第三季度财报有游戏高管电话解读
  7. 求救 2015 款 2017 出厂的 mackookair
  8. 机器学习-机器学习基本方法
  9. Apple II liker programmers black blox
  10. MySQL45讲(第11-15讲)