python爬千图网高清图片

代码如下:

import urllib.request
import re
for i in range(1,2):
        url = "http://www.58pic.com/piccate/7-128-0-default-0_2_0_0_default_0-" + str(i) + ".html"
        data = urllib.request.urlopen(url).read().decode("utf-8","ignore")
        pat = ''
        imgUrlList = re.compile(pat).findall(data)
        for j in range(0,len(imgUrlList)):
                imgPageData = urllib.request.urlopen(imgUrlList[j]).read().decode("utf-8","ignore")
                pat = 'src="(.*?)" class="show-area-pic"'
                imgUrl = re.search(pat,imgPageData).group(1)
                headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
                "Accept-Encoding":"gzip, deflate, sdch",
                "Accept-Language":"zh-CN,zh;q=0.8,en;q=0.6",
                "Referer":imgUrlList[j],
                "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
                }
                try:
                        req = urllib.request.Request(url=imgUrl, headers=headers)
                        response = urllib.request.urlopen(req).read()
                        f = open("G:/py-code/day3/qiantuwang/" + str(i) + str(j) + ".jpg", "wb")
                        f.write(response)
                        f.close()
                        print("第"+str(i)+"页第"+str(j)+"个图片爬取成功")
                except Exception as e:                       
                        print("第"+str(i)+"页第"+str(j)+"失败")

遇到的问题:

  1. HTTP Error 403: Forbidden
  2. UnicodeEncodeError: 'latin-1' codec can't encode character '\u2026' in position 30
  3. 下载的图片打不开

解决方法:

    1.1代理???

刚开始403的时候,以为是我设置的代理挂了,毕竟免费的代理嘛,时常不起作用 (▼ヘ▼#)

然后觉得这样不行呀,这不一定是代理的问题,也可能对方发现我这不是浏览器反爬虫呢!!于是先不使用代理,伪装下浏览器

    1.2 伪装浏览器

通过headers来伪装成浏览器,之前写的小爬虫我都只用了"User-Agent"这一项,但在爬千图网过程中,发现只有这一项的话,还是被禁了,还需要加上"Referer"这一项!

"User-Agent"是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

"Referer"headers的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。(词条解释来自百度)

    2.纯属没见过世面

遇到这个问题的时候,一脸惊奇,我是谁,我在哪,这真的是我写的?

百度后,才发现自己的愚蠢

我复制来的"User-Agent"中竟然有三个省略号...,修改一下就好啦

    3.字符编码

出错原因是,新建文件存图片时,使用"w"进行打开,并把数据转成了str格式,发现本地不能打开。然后换了"wb"打开,取消转成str,正常打开!

话说,用str格式来存储图片,这操作也太让人窒息了吧。

总结:

哼,小小一个千图网竟然耗费我将近4个小时!!!不过最根本的原因还是我太蠢了啦,没经验。但好在废了九牛二虎之力后,还是被我爬到啦!

你可能感兴趣的:(数据挖掘与数据分析)