数据分析与数据挖掘实战视频——学习笔记之淘宝图片爬虫(包括淘宝登录)

之前写的数据分析一实在是太长了,不方便观看。
而且我这个的内容也很多,记录了我的各种尝试和最终结果。我觉得我还是开个单篇解释更好观察。

什么是图片爬虫

图片爬虫是从互联网中自动把对方服务器上的图片趴下来的爬虫程序

淘宝图片爬虫实战:如何爬取淘宝的图片
(没有成功,可能是因为需要登录)

import urllib.request
import re
keyname="短裙"
key=urllib.request.quote(keyname)#编码  处理不了中文 所以处理一下
headers=("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
opener=urllib.request.build_opener()
opener.addHeaders=[headers]
urllib.request.install_opener(opener)

for i in range(0,1):
    url="https://s.taobao.com/list?q="+key+"&cat=16&style=grid&seller_type=taobao&spm=a219r.lm874.1000187.1&bcoffset=0&s="+str(i*60)
    data=urllib.request.urlopen(url).read().decode("utf-8","ignore")#decode解码
    pat='pic_url":"//(.*?)"'
    imagelist=re.compile(pat).findall(data)
    print(imagelist)
    for j in range(0,len(imagelist)):
        thisimg=imagelist[j]
        thisimgurl="http://"+thisimg
        file="D:/FHLAZ/Python37/test2019.2.10/img/"+str(i)+str(j)+".jpg"
        urllib.request.urlretrieve(thisimgurl,filename=file)

补充时间是2019.5.25,这个时候我已经把作业的千图网爬取图片完成了,所以我感觉到了可能解码也有问题,也已经把爬虫的视频看了一遍,现在回头排查失败的,看看能否成功。
对的,没有成功就是因为需要登录,这里的在后续的豆瓣爬虫视频讲解了。
而且解码的类型也有问题,我用了一些代码看了这个的类型,是gbk格式的。

r = requests.get('http://www.******')
print(r.encoding) # gbk
print(r.apparent_encoding) # GB2312

但是直接改成gbk还是有一些错误,所以我还是加上了ignore运行成功。
然后我看了爬取的内容,有一些登录的信息。
在这里插入图片描述
找到登录的链接
https://login.taobao.com/member/login.jhtml

暂时还没成功

后来尝试了很久,但是没有成功,后来上网找了淘宝登录解决方案,有一个有用,可以参考。参考链接:https://www.jianshu.com/p/9b317e95d0a6
这个代码的重点是要cookies.
其次session的应用也不太理解。
这里附上参考链接吧,感兴趣可以看看【Python数据分析】Python模拟登录(一) requests.Session应用

import requests
#淘宝登陆的url
url ="https://login.taobao.com/member/login.jhtml"
#记录登陆状态方便后续请求
ponse = requests.session()
#headers里面加了ua和cookie,如果没有cookie就不能登陆
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
"cookie":"_uab_collina=155015397312624342284555; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; __guid=204189581.1787283599253608000.1550153972933.129; lid=%E8%B4%AD%E7%89%A9%E5%B0%8F%E7%B1%B377; tracknick=%5Cu8D2D%5Cu7269%5Cu5C0F%5Cu7C7377; tg=0; enc=LoQXI%2FBTth%2F%2FcwBZaFK%2FtcLa95sBxPFaPjxClOfhIfrKlE9L%2BkpnyKP6fgLOczV2YaaKJeL4XJWJ1ASjLHN%2B2g%3D%3D; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; _cc_=UIHiLt3xSw%3D%3D; miid=1275592120139724465; cna=3W1HFfXMoSsCAT2EitgjFmTe; t=cac95ca387ff294c3f11eecb25a2fd99; _tb_token_=amScSycRlyl4w61TslsQ; cookie2=1afb2a13cd0c0e33be37061bf4b607ec; v=0; cookieCheck=15117; monitor_count=9; l=bBS8mCZ4vCQpdykQBOfNNuI8LPbtwIOfCsPzw4OG4ICPOF1p7DkOWZt12bY9C3GVZ6O953J4RKM8ByT5eyCV.; isg=BGZmzIBOBhjhcdKV_6QqznDgt9wo76tk0yRgZlAOZwl10wPtvNP4ET7hK496-6IZ"}

data = {
"TPL_username":"……",
"TPL_password_1":"……"}
#测试cookie是否验证成功,可以换成淘宝其他的url
url1 ="https://s.taobao.com/search?q=%E9%94%AE%E7%9B%98&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"
#记录登陆请求状态
ponse.post(url,headers=headers,data=data)
#后续请求
t = ponse.get(url1,headers=headers)
print(t.content.decode("utf-8"))

在这里插入图片描述
可以看出来爬取成功了,我后来考虑过保存爬取的内容,但是出现错误UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa9’ in position 337223: illegal multibyte sequence
参考解决方法:https://blog.csdn.net/anyezhiyin/article/details/82964391

# -*-coding:utf-8-*-
import requests
import re
#淘宝登陆的url
url ="https://login.taobao.com/member/login.jhtml"
#记录登陆状态方便后续请求
ponse = requests.session()
#headers里面加了ua和cookie,如果没有cookie就不能登陆
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
"cookie":"_uab_collina=155015397312624342284555; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; __guid=204189581.1787283599253608000.1550153972933.129; lid=%E8%B4%AD%E7%89%A9%E5%B0%8F%E7%B1%B377; tracknick=%5Cu8D2D%5Cu7269%5Cu5C0F%5Cu7C7377; tg=0; enc=LoQXI%2FBTth%2F%2FcwBZaFK%2FtcLa95sBxPFaPjxClOfhIfrKlE9L%2BkpnyKP6fgLOczV2YaaKJeL4XJWJ1ASjLHN%2B2g%3D%3D; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; _cc_=UIHiLt3xSw%3D%3D; miid=1275592120139724465; cna=3W1HFfXMoSsCAT2EitgjFmTe; t=cac95ca387ff294c3f11eecb25a2fd99; _tb_token_=amScSycRlyl4w61TslsQ; cookie2=1afb2a13cd0c0e33be37061bf4b607ec; v=0; cookieCheck=15117; monitor_count=9; l=bBS8mCZ4vCQpdykQBOfNNuI8LPbtwIOfCsPzw4OG4ICPOF1p7DkOWZt12bY9C3GVZ6O953J4RKM8ByT5eyCV.; isg=BGZmzIBOBhjhcdKV_6QqznDgt9wo76tk0yRgZlAOZwl10wPtvNP4ET7hK496-6IZ"}

data = {
"TPL_username":"……",
"TPL_password_1":"……"}
#测试cookie是否验证成功,可以换成淘宝其他的url
url1 ="https://s.taobao.com/search?q=%E9%94%AE%E7%9B%98&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306"
#记录登陆请求状态
ponse.post(url,headers=headers,data=data)
#后续请求
t = ponse.get(url1,headers=headers)
data=t.content.decode("utf-8")

bian = re.compile(r'\xa9')
data = re.sub(bian,'',data)
fh=open("F:/file1.txt","w")
fh.write(data)
fh.close()

这是改了之后的代码,可以把内容存下来。

# -*-coding:utf-8-*-
import requests
import urllib.request
import urllib.parse
import re
import requests
keyname="短裙"
key=urllib.request.quote(keyname)#编码  处理不了中文 所以处理一下
#headers里面加了ua和cookie,如果没有cookie就不能登陆
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
"cookie":"_uab_collina=155015397312624342284555; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; __guid=204189581.1787283599253608000.1550153972933.129; lid=%E8%B4%AD%E7%89%A9%E5%B0%8F%E7%B1%B377; tracknick=%5Cu8D2D%5Cu7269%5Cu5C0F%5Cu7C7377; tg=0; enc=LoQXI%2FBTth%2F%2FcwBZaFK%2FtcLa95sBxPFaPjxClOfhIfrKlE9L%2BkpnyKP6fgLOczV2YaaKJeL4XJWJ1ASjLHN%2B2g%3D%3D; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; _cc_=UIHiLt3xSw%3D%3D; miid=1275592120139724465; cna=3W1HFfXMoSsCAT2EitgjFmTe; t=cac95ca387ff294c3f11eecb25a2fd99; _tb_token_=amScSycRlyl4w61TslsQ; cookie2=1afb2a13cd0c0e33be37061bf4b607ec; v=0; cookieCheck=15117; monitor_count=9; l=bBS8mCZ4vCQpdykQBOfNNuI8LPbtwIOfCsPzw4OG4ICPOF1p7DkOWZt12bY9C3GVZ6O953J4RKM8ByT5eyCV.; isg=BGZmzIBOBhjhcdKV_6QqznDgt9wo76tk0yRgZlAOZwl10wPtvNP4ET7hK496-6IZ"}
opener=urllib.request.build_opener()
opener.addHeaders=[headers]
urllib.request.install_opener(opener)


#淘宝登陆的url
login_url ="https://login.taobao.com/member/login.jhtml"
#记录登陆状态方便后续请求
ponse = requests.session()
mydata=urllib.parse.urlencode({
    "TPL_username":"……",
    "TPL_password_1":"……"}).encode("utf-8")#进行相应的编码为中文

#记录登陆请求状态
ponse.post(login_url,headers=headers,data=mydata)




for i in range(0,1):
    url="https://s.taobao.com/list?q="+key+"&cat=16&style=grid&seller_type=taobao&spm=a219r.lm874.1000187.1&bcoffset=0&s="+str(i*60)
    data= ponse.get(url,headers=headers).content.decode("utf-8")
    '''
    bian = re.compile(r'\xa9')
    data = re.sub(bian,'',data)
    fh=open("F:/file1.txt","w")
    fh.write(data)
    fh.close()
    '''
    pat='pic_url":"//(.*?)"'
    imagelist=re.compile(pat).findall(data)
    print(imagelist)
    for j in range(0,len(imagelist)):
        thisimg=imagelist[j]
        thisimgurl="http://"+thisimg
        file="D:/FHLAZ/Python37/test2019.2.09/img/"+str(i)+str(j)+".jpg"
        #file="F:/img/"+str(i)+str(j)+".jpg"
        urllib.request.urlretrieve(thisimgurl,filename=file)


在这里插入图片描述

2019.5.25 今天爬取短裙图片的终于成功了,但是我无法简单的利用视频所学的来解决。之后也可以再研究研究别的实现手段。

在这里如何爬取淘宝图片解决了。

我目前最常见的问题就是乱码问题,感觉可以爬取保存下来,看看具体是什么。多尝试下。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值