之前写的数据分析一实在是太长了,不方便观看。
而且我这个的内容也很多,记录了我的各种尝试和最终结果。我觉得我还是开个单篇解释更好观察。
图片爬虫是从互联网中自动把对方服务器上的图片趴下来的爬虫程序
淘宝图片爬虫实战:如何爬取淘宝的图片
(没有成功,可能是因为需要登录)
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 今天爬取短裙图片的终于成功了,但是我无法简单的利用视频所学的来解决。之后也可以再研究研究别的实现手段。
在这里如何爬取淘宝图片解决了。
我目前最常见的问题就是乱码问题,感觉可以爬取保存下来,看看具体是什么。多尝试下。