美文网首页Python精选生活不易 我用python
听说迅雷看图要会员?python篇

听说迅雷看图要会员?python篇

作者: Rokkia | 来源:发表于2017-04-10 20:41 被阅读277次

    想必用过迅雷的朋友都有体验,就是左边是下载信息,右边却是广告之类的。偶尔也会有些美女图片的推送,咳~,本着好奇的心里,我就点进去看了一下。
    这是网址http://meitu.xunlei.com/index.html
    然后发现,哇,好多美女啊。本着养眼的目标,我就往后看了看。突然发现个问题,有的图片只能看五张!五张!可恶啊。
    比如这样的:

    Paste_Image.png

    那段时间刚接触爬虫,然后看什么都想看看他的URL,都想看看他的HTML结构看看能不能爬取一下看看。
    于是我点击鼠标右键,复制了图片网址,然后打开看了一下。

    Paste_Image.png

    不经意间发现了一个奇怪的数字,1.jpg?难道还有2.jpg?。然后我又复制了第二张可看图片地址发现还真有2.jpg。

    让我们比较一下这两个网址:
    http://data.meitu.xunlei.com/data/image/suntiantian0922/1.jpg
    http://data.meitu.xunlei.com/data/image/suntiantian0922/2.jpg
    除了末尾不一样,貌似没啥区别,如果改成6呢?

    问题就来了,他显示的这个。


    Paste_Image.png

    本以为是巧合,结果我试了试其他的貌似也是这样。

    这样我是不是就可以把这一套都爬下来了,貌似是的,于是就写了一下程序。

    def pic_request(tup):
          #通过tup[1]拿到一共多少张图
          num = tup[1]
          #通过tup[0]拿到套图名字
          pic_name = tup[0]
          #设置路径
          path = pic_path + pic_name
          #创建路径
          os.chdir(path)
          for i in range(int(num)):
              #然后,发送请求然后保存图片
              resp = requests.get(built_url(pic_name, i + 1))
              if resp is None:
                  raise 'Error'
              else:
                  filename = '%s_%s.jpg' % (pic_name, i + 1)
                  with open(filename, 'wb') as f:
                      f.write(resp.content)
    

    怎么才能拿到所有的图呢?很是好奇,于是找了一下,皇天不负有心人,在这里我发现了。

    Paste_Image.png

    我么来解析一下这个js

    Paste_Image.png

    这三个数据,大概就是我们需要的。

    需要就拿下来呗

    #请求js拿到数据
     def requestAllUrl():
          resp = requests.get(all_url, headers=headers)
          jsontext = resp.content
          #匹配拿到list中的数据
          json_match = re.search(r'\[.*\]', jsontext)
          if json_match is None:
              raise 'match Error'
          else:
              json_a = json.loads(json_match.group())
          if json_a is None:
              raise 'json Error'
          else:
              返回数据
              yield json_a
    

    主程序中我们需要这样执行.

     def main():
          try:
              json_a = requestAllUrl()
          except Exception as e:
              print e
          #尝试使用多进程  
          p = Pool(4)
          for dic in json_a:
              try:
                  os.chdir(pic_path)
                  title = dic['title']
                  match = re.search(r'花絮$', title)
                  print match
                  if match is None and int(dic['totals']) != 1:
                      os.makedirs(dic['resource_id'])
                      tup = (dic['resource_id'], dic['totals'])
                      #使用多进程异步请求,请求方法为pic_request方法
                      p.apply_async(pic_request, args=(tup,))
              except Exception as e:
                  print e
          p.close()
          p.join()
    

    ok这样我们就算完成了,然后就可以美美的看图了。

    相关文章

      网友评论

        本文标题:听说迅雷看图要会员?python篇

        本文链接:https://www.haomeiwen.com/subject/zfbinttx.html