python爬虫百度图片_python3爬取百度图片(2018年11月3日有效)
最终目的:能通过输入关键字进行搜索,爬取相应的图片存储到本地或者数据库
首先打开百度图片的网站,搜索任意一个关键字,比如说:水果,得到如下的界面
分析:
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日有效)相关推荐
- python爬虫之正则表达式练习——爬取百度图片
1 明确需求,创建环境 ''' 第一步:明确需求,转换图片 需求:爬取百度图片中关于森林的图片,并保存 网址:https://image.baidu.com/search/index?tn=baidu ...
- 【python 爬虫】 scrapy 入门--爬取百度新闻排行榜
scrapy 入门–爬取百度新闻排行榜 环境要求:python2/3(anaconda)scrapy库 开发环境:sublime text + windows cmd 下载scrapy(需要pytho ...
- python爬虫入门教程:爬取网页图片
在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的.而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程: 准备工作 语言:python IDE:py ...
- php爬去百度图片,python爬虫:随心所欲地爬取百度图片
文章目录一.前言 二.需要导入的库 三.实现过程 1.下载链接分析 2.代码分析 3.完整代码 四.Blogger's speech 一.前言 之前爬取了很多静态网页的内容,包括:小说.图片等等,今天 ...
- python爬虫爬取百度图片,python爬虫篇2:爬取百度图片
入门级 import requests import re import os from urllib import error def main(): dirPath = "E:\pyth ...
- python爬虫实战(一)~爬取百度百科人物的文本+图片信息+Restful api接口
我的github地址:https://github.com/yuyongsheng1990/python_spider_from_bdbaike # -*- coding: UTF-8 -*- # @ ...
- python 爬取百度知道_python3爬取百度知道的问答并存入数据库(MySQL)
一.链接分析: 以"Linux"为搜索的关键字为例: 首页的链接为:https://zhidao.baidu.com/search?lm=0&rn=10&pn=0& ...
- python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片
Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...
- 测试爬虫 爬取百度贴吧 爬取百度搜图图片
测试爬取百度贴吧图片 定义爬取百度斗图吧首页的每条贴子的URL的爬取规则对象 /*** 斗图吧贴子的url*/SpiderFunction<Set<String>> doutu ...
最新文章
- 计算机精英协会考核题 —— 第一题:厄密多项式
- CMS之图片管理(2)
- InfoQ —— 腾讯游戏大数据服务场景与应用
- Windows 10正式版21H2更新:之后功能性更新将减为年更
- Android 推断当前Activity是不是最后一个Activity 以及 应用或Activity是否存在
- Django缓存设置
- OSPF:STUB与NSSA区别
- matlab画图的参数,matlab画图参数
- android tv 8 安装国内app,不花钱解决 Android TV 原生系统国内APP不显示图标
- 程序员内部培训与个人发展杂谈
- GSM+GPRS通信模块SIM800C介绍
- 手机APP测试——Perfecto
- AI丨亚马逊将在加州欧文地区测试其自动送货机器人Scout
- 三国志战略版:Daniel_张角分析
- 钢管车架管材的分级介绍 (zz)
- 单片机初学者电路常识
- 江南计算机研究所招聘物联网学院,江南大学:物联网工程学院培育物联网精英人才...
- 秒 毫秒 微秒 纳秒 皮秒。。时间单位换算
- 小区物业管理系统设计与开发论文
- springboot2.x 的 RedisCacheManager设置缓存失效时间