Python爬虫获取异步加载站点pexels并下载图片(Python爬虫实战3)

1. 异步加载爬虫

  对于静态页面爬虫很容易获取到站点的数据内容,然而静态页面需要全量加载站点的所有数据,对于网站的访问和带宽是巨大的挑战,对于高并发和大访问访问量的站点来说,需要使用AJAX相关的技术来实现异步加载,即根据需要来获取数据,以pexels网站为例,按F12,切换到Network的XHR标签,通过下拉菜单访问该站点,此时数据会以此加载,在XHR页面中会逐步增加访问的URL地址,点击查看其中一个URL地址,发现其URL的地址类似为:https://www.pexels.com/search/book/?page=3&seed=2018-02-22+05:21:39++0000&format=js&seed=2018-02-22 05:21:39 +0000,将其修改为https://www.pexels.com/search/book/?page=3,并修改page后面数的值发现可以访问到不同的页面内容,以此来构造需要访问的url站点内容。

2. 代码内容

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

#!/usr/bin/python

#_*_ coding:utf _*_

#author: HappyLau

#blog: https://www.cnblogs.com/cloudlab

import os

import sys

import time

import os.path

import random

import requests

from lxml import etree

reload(sys)

sys.setdefaultencoding('utf8')

def get_jianshu(url):

    '''

    demo简书网站的获取信息

    '''

    headers = {"User-Agent""Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"}

    try:

        req = requests.get(url,headers=headers)

        if req.status_code == 200:

            return req.text.encode('utf8')

        else:

            return ''

    except Exception as e:

        print e

def get_picture(url,download_dir):

    '''

    @params:获取url中的图片信息,并将其下载到download_dir目录中

    @download_dir:图片下载的本地路径

    '''

    if not os.path.exists(download_dir):

        os.mkdir(download_dir)

    html = get_jianshu(url)

    selector = etree.HTML(html)

    for url in selector.xpath('//img[@class="photo-item__img"]/@src'):

        picture_name = url.split("?")[0].split("/")[-1]

        print "downloading picutre %s" % (picture_name)

        with file(download_dir + picture_name,'wb') as f:

            f.write(requests.get(url).content)

        time.sleep(random.randint(1,3))

if __name__ == "__main__":

    url_lists = ['https://www.pexels.com/search/book/?page={}'.format(i) for in range(1,21)]

    for url in url_lists:

        get_picture(url,'/root/pexels')

3. 下载图片使用方式

  上面使用requests.get().content的方式来实现下载图片的方法,还可以通过urllib.urlretrieve()方法来实现图片的下载功能,该函数的使用参数为:retrieve(self, url, filename=None, reporthook=None, data=None),其中url地址为需要访问的url路径,filename为本地存放图片的路径,修改代码内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

#!/usr/bin/python

#_*_ coding:utf _*_

#author: HappyLau

#blog: https://www.cnblogs.com/cloudlab

import os

import sys

import time

import os.path

import random

import requests

import urllib

from lxml import etree

reload(sys)

sys.setdefaultencoding('utf8')

def get_jianshu(url):

    '''

    demo简书网站的获取信息

    '''

    headers = {"User-Agent""Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"}

    try:

        req = requests.get(url,headers=headers)

        if req.status_code == 200:

            return req.text.encode('utf8')

        else:

            return ''

    except Exception as e:

        print e

def get_picture(url,download_dir):

    '''

    @params:获取url中的图片信息,并将其下载到download_dir目录中

    @download_dir:图片下载的本地路径

    通过利用urllib模块中的urlretrieve()方法实现图片的下载功能

    '''

    if not os.path.exists(download_dir):

        os.mkdir(download_dir)

    html = get_jianshu(url)

    selector = etree.HTML(html)

    for url in selector.xpath('//img[@class="photo-item__img"]/@src'):

        picture_name = download_dir + "/" + url.split("?")[0].split("/")[-1]

        print "downloading picutre %s" % (picture_name)

        urllib.urlretrieve(url,picture_name)            #下载图片

        time.sleep(random.randint(1,3))

if __name__ == "__main__":

    url_lists = ['https://www.pexels.com/search/book/?page={}'.format(i) for in range(1,21)]

    for url in url_lists:

        get_picture(url,'/root/pexels')

  

Python爬虫获取异步加载站点pexels并下载图片(Python爬虫实战3)相关推荐

  1. 用Python爬取动态加载的诸如百度的图片

    用Python爬取动态加载的诸如百度的图片 使用原因 代码如下 模块介绍 selenium模块 lxml解析模块 requests模块 去除重复 开启多线程 效果如下 留言 使用原因 学习Python ...

  2. Python爬虫 解决异步加载问题--以爬取PEXELS图片为例

    第一次尝试爬取->[Python爬虫]爬虫实例:三种方式爬取PEXELS图片 在爬取PEXELS时,遇到了这样问题: 页面使用Ajax的异步加载技术来实现分页,所以通过request.text无 ...

  3. python提取ajax异步加载数据_python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题...

    1.背景 之前的文章中已经介绍过猫眼TOP100的电影信息爬取案例,网页每页有10条电影信息,通过翻页发现URL变化规律构造循环爬取10页100条全部电影信息.但是豆瓣电影分类排行榜的网页情况就所不同 ...

  4. Unity可自定义loading页的异步加载工具,免费下载,使用说明

    本文是针对ZTools中异步加载工具的使用说明,包含实现过程以及如何使用  免费下载地址:请到[ https://gitee.com/jacobkay/unity-ZTools-LoadSceneAs ...

  5. 如何获取已加载在ImageView中的图片ID

    动机:程序的某个Activity中有一个ListView,ListView的每行视图中都有ImageView,程序初始化后,通过Adapter向ImageView中加载图片,现在的需求是,点击该图片能 ...

  6. js如何将数据放在一个内置窗口里面_Java 爬虫遇上数据异步加载,试试这两种办法!...

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  7. java 爬虫 异步_Java 爬虫遇上数据异步加载,试试这两种办法!

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  8. JAVA异步爬虫_Java 爬虫遇上数据异步加载,试试这两种办法!

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  9. IOS中UITableView异步加载图片的实现

    本文转载至 http://blog.csdn.net/enuola/article/details/8639404  最近做一个项目,需要用到UITableView异步加载图片的例子,看到网上有一个E ...

最新文章

  1. shell命令之---LVM文件系统
  2. 静态初始化块的执行顺序
  3. android 调试小技巧
  4. Linux下搭建SVN服务器及自动更新项目文件到web发布目录(www)
  5. why SAP OData default 100 entries are returned
  6. 【转】数据库软考笔记(一)第一章 计算机硬件基础知识笔记总结
  7. 微服务Dubbo和SpringCloud架构设计、优劣势比较
  8. vscode open with live server_vscode容器开发填坑记录remote-container
  9. OpenCV3.4.3+Qt5.9.4(QtCreator)开发环境搭建
  10. 2015软件测试面试题第三篇
  11. win10 uwp 渲染原理 DirectComposition 渲染
  12. 一个牛人给Java小生们的建议
  13. 【数学建模】数学建模论文写作
  14. 纯CSS打造淘宝导航菜单栏
  15. 逃离一线!从上海举家回成都七年,现在怎么样了?
  16. 微信小程序显示圆形图片
  17. MAC版SecureCRT+SecureFX破解
  18. 数字营销中台和全渠道的数字化精耕,快消老品牌实现数字营销焕新生
  19. 单片机程序运行在哪里
  20. 认识Access中的MDE文件

热门文章

  1. easyui treegrid php,Easyui 之 Treegrid 笔记
  2. Ubuntu实现网络链接设置
  3. laravel过滤富文本提交的标签(防止XSS等js脚本攻击)
  4. 企鹅号快速赚钱方法?企鹅号收益情况?
  5. 10个方法教你解决虚幻4运行崩溃问题
  6. 【工具】VScode|Linux 中怎么调试 Python 项目比较方便?又名 VScode 怎么调试 Python 项目(兼容环境Ubuntu18.04)
  7. c语言编写生日祝福语大全,C++求高手帮忙写个程序...输出“生日快乐”四个字..用符号拼出来..谢谢啦...
  8. UIKit Dynamics入门
  9. android 4.4 蓝牙开发总结(电视盒子)
  10. (自己收藏)全面理解面向对象的 JavaScript