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

简单讲解下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编译器#冲突了你们自行看着改一下

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬虫是一种可以自动从网页上获取数据的程序。以下是使用Python编写简单的爬虫程序来爬取图片的基本过程: 1. 准备工作:导入所需的库,例如requests和re。设置请求头,以模拟浏览器发送请求。创建一个文件夹来存储下载的图片。 2. 发送请求并获取响应:使用requests库发送GET请求,传入目标网址和请求头。获取响应内容。 3. 解析响应内容:使用正则表达式找到所有图片的URL。正则表达式的模式可以根据具体的网页结构进行调整。 4. 遍历图片URL并下载:使用循环遍历每个图片URL,发送请求并获取响应。将响应内容保存到文件中,命名为图片的标题加上图片的后缀。 下面是一个简单的爬虫程序示例: ```python import requests import re import os image_folder = '表情包' # 设置保存图片的文件夹名称 if not os.path.exists(image_folder): os.mkdir(image_folder) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0' } response = requests.get('https://qq.yh31.com/zjbq/', headers=headers) response.encoding = 'utf-8' t = r'<img src="(.*?)" alt="(.*?)" width="160" height="120">' result = re.findall(t, response.text) for img in result: res = requests.get(img[0]) s = img[0].split('.')[-1] with open(image_folder + '/' + img[1] + '.' + s, mode='wb') as file: file.write(res.content) ``` 请注意,根据不同的网站和页面结构,代码中的正则表达式模式和其他部分可能需要进行适当的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值