简单讲解下python爬取百度图片的方法还有一些小坑(ps:我是搞.net的所以python只是新手讲错勿怪,注意:系统是windows下的)

首先讲下对百度图片上请求的分析:这里我引用下别人的博客,他已经讲的非常的详细了我就讲下需要注意的地方

先把坑列一个列表:
- 编码
- 路径(百度上的反爬虫和src欺骗)
- econdURL编码


编码

老手就绕过吧,对于入门的新手我还是讲一讲对于python编码,在windows下python是默认不支持中文的,因为python默认的是asci格式处理的然而这个格式是没有中文的,所以当我们要百度上爬取一个图片我们写入关键词是中文的时候就会在中文的地方先报错。如果我们的路径是和要搜索的关键词是相关的那么必须要将中文的关键词编码: KeyWord.decode('utf-8')这样子。还有一个很重要的事情,先将python文件用记事本方式打开然后选着utf-8的格式另存为然后替换源文件,这样子保证文件的编码是utf-8.

路径

百度图片上的路径是假的,这个如果直接复制路径在浏览器上打开那是可以访问图片的但是如果我们用urllib.urlretrieve()方法去下载这个图片那么下载到本地的图片就是无法打开的是错误的图片文件。这个就是个坑爹。正的路径它放在li中而不是img标签的src中。当然这里不是我们关心的,我们采取的方式是请求百度的json数据然后解析图片的json中url然后下载,但是这个其中也有很多欺骗。![这个是我们在谷歌浏览器的network上看到的请求路径](https://img-blog.csdn.net/20170217221722026?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva29sb3VtaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
然后我们将路径拿下来我们只取到host后面的我们自己组装,![这个就是url后面的参数我们按照这个格式将参数自己组装起来就可以请求了。](https://img-blog.csdn.net/20170217221903794?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva29sb3VtaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
然后讲一下这其中的坑爹的地方,我们明显可以看到这个url不加参数应该是http://image.baidu.com/search/acjson应该是这个,然后当我们将参数配置好开始请求的时候发现请求过来的数据都是错误的都是一些无法打开的图片。其实这个地方应该是https://image.baidu.com/search/acjson
这样的才是正确的地址。(当然具体的我没有研究)
最后将这个改为就好了

econdURL

我们在参数中要用到的关键词就是需要用这个进行编码的,然后我们key = urllib.quote('哈士奇')对关键词进行编码就OK了

代码

`#-- coding:utf-8 --

import os
import sys
import requests
import socket
·#设置超时时间
socket.setdefaulttimeout(10)
import urllib2
import urllib

·#搜索关键字
KeyWord = “哈士奇”
·#设置图片文件保存
DownloadPath = os.path.abspath(‘..’) + ‘/pic/’ + KeyWord.decode(‘utf-8’) + ‘/’
·#图片的数量
PageNum = 60
EveryPageImgNum = 30
NowDownloadImgPos = 0

def Request(param):
global NowDownloadImgPos
isSuccess = True
#请求的地址
url = “https://image.baidu.com/search/acjson”
#请求头
headers = {
#”referer” : “https://image.baidu.com/search/index“,
“accept” : “text/plain, /; q=0.01”,
“accept-encoding” : “gzip”,
#”Content-Type” : “application/json”,
“user-agent” : “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36”,
}
·#对请求路径进行组装
url = CombieURL(url, param)
print “TheURL—–>:” + url
·#开始请求
response = requests.get(url, headers = headers)

#获取路径所在的json
json = response.json()[‘data’]
for i in range(0,len(json)):
try:
downloadimgurl = json[i][‘thumbURL’]
exPath,exName = os.path.splitext(downloadimgurl)
localimgurl = DownloadPath + ‘pic_hashiqi_Pos’ + str(NowDownloadImgPos) + exName

urllib.urlretrieve(downloadimgurl, localimgurl)
isSuccess = True
NowDownloadImgPos += 1
print ‘[Success] : Download the Img num is ’ + str(NowDownloadImgPos) + ‘—–’ + ‘ImgUrl: ’ + downloadimgurl
except Exception,e:
if isSuccess == True:
NowDownloadImgPos += 1
isSuccess = False
print ‘[Error] : Exception —–> ’ + str(Exception) + ‘&&&& e —–> ’ + str(e)
return
·#组装URL
def CombieURL(url,params):
url = url + ‘?’
length = len(params)
nownum = 0
for nownum in range(0, length):
url = url + params[nownum][0] + “=” + params[nownum][1]
if nownum != length:
url = url + “&”
else:
break
return url

·#组装参数和查询图片
def Search():
key = urllib.quote(‘哈士奇’)
#key = “%E5%93%88%E5%A3%AB%E5%A5%87”
newparams = [
[‘tn’ , ‘resultjson_com’],
[‘ipn’ , ‘rj’],
[‘ct’ , ‘201326592’],
[‘is’ , ”],
[‘fp’ , ‘result’],
[‘queryWord’ , key],
[‘cl’ , ‘2’],
[‘lm’ , ‘-1’],
[‘ie’ , ‘utf-8’],
[‘oe’ , ‘utf-8’],
[‘adpicid’ , ”],
[‘st’ , ”],
[‘z’ , ”],
[‘ic’ , ”],
[‘word’ , key],
[’s’ , ”],
[‘se’ , ”],
[‘tab’ , ”],
[‘width’ , ”],
[‘height’ , ”],
[‘face’, ”],
[‘istype’, ”],
[‘qc’, ”],
[‘nc’, ”],
[‘fr’, ”],
[‘pn’, str(PageNum)],
[‘rn’, str(EveryPageImgNum)],
[‘gsm’,’5a’],
[‘1487250380474’, ”]
]
Request(newparams)

if name == ‘main‘:
print ‘[Debug] : DownLoad Start: —>DownLoadPath—>’ + DownloadPath
#检查路径是否存在如果不存在就创建
if os.path.exists(DownloadPath) == False:
os.mkdir(DownloadPath)
Search()
print ‘[Debug] : Download Complete’
`
ps: 由于python注释和CSDN编译器#冲突了你们自行看着改一下

入门级别的Python爬虫代码 爬取百度上的图片相关推荐

  1. Python爬虫,爬取百度贴吧图片和视频文件,xpath+lxml,访问被拒的原因分析

    目录 百度贴吧图片和视频文件爬取程序 1.需求分析 2.url分析 3.Xpath分析 4.程序设计 5.坑点 百度贴吧图片和视频文件爬取程序 1.需求分析 进入百度贴吧,搜索周杰伦,进入周杰伦吧.我 ...

  2. 10-24-程序员日-我的第一个python爬虫项目-爬取蜂鸟上的图片

    今天是诸位程序员的节日,为了1024勋章,我这个菜鸟也来发个博客 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序. 在 ...

  3. Python爬虫,爬取51job上有关大数据的招聘信息

    Python爬虫,爬取51job上有关大数据的招聘信息 爬虫初学者,练手实战 最近在上数据收集课,分享一些代码. 分析所要爬取的网址 https://search.51job.com/list/000 ...

  4. Python爬虫之爬取绝对领域美女图片

    Python爬虫之爬取绝对领域美女图片 第一步: 导入模块: import requests from lxml import etree 第二步:定义函数: def get_url(start_ur ...

  5. python爬取贴吧所有帖子-Python实现的爬取百度贴吧图片功能完整示例

    本文实例讲述了Python实现的爬取百度贴吧图片功能.分享给大家供大家参考,具体如下: #coding:utf-8 import requests import urllib2 import urll ...

  6. python爬虫之爬取百度网盘

    爬虫之爬取百度网盘(python) #coding: utf8 """ author:haoning create time: 2015-8-15 "" ...

  7. python爬虫(13)爬取百度贴吧帖子

    爬取百度贴吧帖子 一开始只是在网上看到别人写的爬取帖子的文章,然后自己就忍不住手痒自己锻炼一下, 然后照着别人的写完,发现不太过瘾, 毕竟只是获取单个帖子的内容,感觉内容稍显单薄,然后自己重新做了修改 ...

  8. python爬虫:爬取百度小姐姐照片

    自从学会了爬虫,身体状况一天不如一天,营养都跟不上了,教大家爬取百度性感小姐姐的图片,先看一下效果. 项目流程 第一步:准备工作 工欲善其事,必先利其器 pip install requests,该模 ...

  9. python爬虫实战,爬取洛杉矶上千房源!

    前言 最近打算签证流程结束后,开始看看加州的房子了,毕竟研究生是不太容易住校内的,具体来说还是看看洛杉矶的房源.因为网站在国外,访问比较慢,不同页的也不好比较,于是想着把它全部爬取下来整理成docx文 ...

最新文章

  1. cufflinks基于dataframe数据自定义绘图基于df.iplot功能
  2. PHP正则表达式快速学习方法
  3. CSS原理解析之模型篇
  4. 安卓逆向_20 --- 模拟器检测、反调试检测、ELF动态调试、__libc_init 下断
  5. Windows下安装谷歌测试框架Googletest并测试小例子
  6. 集群的可扩展性及其分布式体系结构(2)-上
  7. 荣耀2021年度手机颜值天花板首销!2699元起
  8. 点石关键词排名优化软件_福建关键词优化软件有哪些
  9. Spring Boot 表单验证
  10. 1. C++基础知识学习及其深入理解(面向对象部分还没学) -- 课程1完成
  11. office 2021安装教程+下载
  12. matlab中appdesigner的控件简单讲解
  13. ❤️腾讯面试,万字攻略详解, offer到碗里来❤️
  14. Spark优化——推测执行机制
  15. TDengine:无模式写入行协议的四种方式
  16. python爬虫(五):博客spider
  17. 计算机无法进入桌面怎么备份,系统崩溃无法启动如何从pe进入系统备份C盘和桌面重要文件...
  18. 关于支持电脑登录选项设置
  19. 数仓 即席查询 之 Persto
  20. 微信小程序demo1计算器

热门文章

  1. Python爬取微信朋友圈 ! 让屏蔽你的女神无处可躲 ?
  2. es6 map()和filter()详解【转】
  3. JH50变温教学霍尔测试系统设计方案概述
  4. Hive导出为csv文件中遇到的单引号问题
  5. 机器学习中的数学原理——向量内积
  6. VUE ajax解决同步请求问题
  7. Word 2016 撰写论文: 公式居中、编号右对齐
  8. 活动策划大揭秘:如何制定执行方案
  9. 怎样解决Java Web项目更改项目名后报错以及不能找到web路径问题
  10. 声明式事务(Transactional)的工作原理