zoukankan      html  css  js  c++  java
  • python应用:爬虫实例(动态网页)

    以爬取搜狗图片为例,网页特点:采用“瀑布流”的方式加载图片,图片的真实地址存放在XHR中

     1 #-*-coding:utf8-*-
     2 import requests
     3 import urllib
     4 import json
     5 import math
     6 import os
     7  
     8 class SG:
     9     def __init__(self,pic_num):
    10         self.num = pic_num
    11         self.user_agent = 'Mozilla/5.0 (Windows NT 6.1; W…) Gecko/20100101 Firefox/61.0'      #请求头属性(模拟浏览器访问)
    12         self.headers = {'User-Agent' : self.user_agent}
    13 
    14     def get_img(self):
    15         end = int(math.ceil(float(self.num)/48))
    16         #print end
    17         name = 1
    18         #获取图片真实地址并保存到本地文件夹
    19         for start in range (0,end):
    20             url = 'http://pic.sogou.com/pics?query=%B1%DA%D6%BD&mode=1&dm=4&cwidth=1920&cheight=1080&start='+str(start)+'&reqType=ajax&reqFrom=result&tn=0'
    21             imgs = requests.get(url,params=self.headers)
    22             #print imgs
    23             #搜狗图片真实地址存放在XHR中,访问发现是json文件,故解析json文件
    24             jd = json.loads(imgs.text)
    25             jd = jd['items']    #所有图片的信息都存在item数组中
    26             imgs_url = []
    27             for j in jd:
    28                 if "=" not in j['pic_url']:  #图片真实地址则存放在item元素中pic_url中
    29                     imgs_url.append(j['pic_url'])
    30                 else:
    31                     print j['pic_url']
    32             #print len(imgs_url)
    33             
    34             for img_url in imgs_url:
    35                 #新建文件夹
    36                 if not os.path.exists('picture'):
    37                     os.makedirs('picture')
    38                 print img_url
    39 
    40                 #保存图片到本地文件夹
    41                 print('**********'+str(name)+'_1.jpg*********'+'      Downloading')
    42                 #方法1
    43                 urllib.urlretrieve(img_url,'picture\'+str(name)+'_1.jpg')
    44                 
    45                 print('**********'+str(name)+'_2.jpg*********'+'      Downloading')
    46                 #方法2  'wb'以二进制方式写数据
    47                 with open('picture\'+str(name)+'_2.jpg','wb') as f:
    48                     f.write(requests.get(img_url,params=self.headers,allow_redirects=False).content)
    49 
    50                 name += 1
    51                         
    52         print('Download complete!')
    53 
    54 SG(100).get_img()
    55                 
    56                 

     使用方法二时,如果使用参数allow_redirects=False,容易导致下载内容为空的情况;如果不使用该参数(默认是True),则容易导致页面重定向过多的错误。具体使用时,根据情况选择是否使用

  • 相关阅读:
    Python3.5 Day2作业:购物车程序
    Python3.5 Day1作业:实现用户密码登录,输错三次锁定。
    Python3.5 day3作业二:修改haproxy配置文件。
    Python3.5 day3作业一:实现简单的shell sed替换功能
    Python3.5 day4作业:对员工信息文件,实现增删改查操作。
    栈的数组实现
    栈的链式实现
    20101217
    traits
    DES加密算法中的IP置换算法
  • 原文地址:https://www.cnblogs.com/jpapplication/p/9610758.html
Copyright © 2011-2022 走看看