Python爬虫图片懒加载技术 selenium和PhantomJS解析

Python爬虫图片懒加载技术 selenium和PhantomJS解析

本文将介绍如何利用Python爬虫对使用懒加载技术的网页上的图片进行爬取。在这里我将使用selenium和PhantomJS解析器作为我们工具。其中selenium是一个流行的Web自动化测试框架,可以模拟用户在浏览器上的各种操作,而PhantomJS是一个无界面的,基于WebKit的JavaScript解释器,可以处理Web界面渲染和页面抓取的任务。以下是整个过程的详细步骤。

准备工作

在开始之前,您需要先安装以下工具:

  1. Python:我将使用Python3版本,您可以前往官网下载安装。
  2. selenium源代码包和PhantomJS解析器:您可以使用以下命令进行安装:
pip install selenium
  1. PhantomJS解析器:您也可以从PhantomJS官网下载并安装。

步骤 1:使用selenium和PhantomJS设置驱动程序

在这个项目中,我们将使用PhantomJS作为解析器,selenium作为Python与PhantomJS之间的桥梁。以下是如何设置这些驱动程序的步骤:

from selenium import webdriver

#创建PhantomJS的web驱动
browser = webdriver.PhantomJS(executable_path='D:/Tools/phantomjs-2.1.1-windows/bin/phantomjs.exe')

以上代码会创建一个名为“browser”的PhantomJS web驱动程序,并将其保存在可执行文件“phantomjs.exe”的路径中。这里,我们将会使用phantomjs 作为我们的默认解析器。

步骤 2:访问网站并加载页面

接下来,我们将访问我们要爬取数据的目标网站,并加载其中的所有网页内容。以下是这个步骤的代码:

#访问目标网站
browser.get("https://www.example.com")

#加载网站全部内容
content = browser.page_source.encode('utf-8')

这里,我们使用了PhantomJS的get方法来实现对目标网站的访问。我们在加载了全部网站内容之后,将会使用Python的encode()函数对其进行编码,最终将其保存在变量“content”中。

步骤 3:识别页面中的图片

在这个步骤中,我们将使用BeautifulSoup库来解析页面中所有元素。以下是这个步骤的代码:

from bs4 import BeautifulSoup

soup = BeautifulSoup(content,'lxml')
img_tags = soup.find_all('img',src=True)

以上代码将使用BeautifulSoup库对页面内容进行解析,并将其中所有包含“img”元素的标签都存储在名为“img_tags”的变量中。

步骤 4:下载页面中的所有图片

在这个步骤中,我们将循环遍历所有的图像标签,并尝试下载其中的图片。以下是这个步骤的代码:

import requests
import os

#定义存储文件夹的路径
folder_path='./images/'

#判断文件夹是否存在,不存在则新建
if not os.path.exists(folder_path):
    os.makedirs(folder_path)

#循环遍历所有的图像标签
for img in img_tags:
    #获取图像的URL
    img_url = img['src']

    #下载图像并将其保存到指定的文件夹中
    response = requests.get(img_url)
    with open(folder_path + img_url.split('/')[-1], 'wb') as f:
        f.write(response.content)
        print("下载图片:",img_url)

在以上代码中,我们使用了requests库和os库。requests库被用来下载我们在步骤2中指定的图片,而os库则被用来定义我们存储所有图片的文件夹路径。

示例1

以下是一个完整代码片段。在这个示例中,我们将抓取豆瓣电影《肖申克的救赎》的海报。

from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import os

#创建PhantomJS的web驱动
browser = webdriver.PhantomJS(executable_path='D:/Tools/phantomjs-2.1.1-windows/bin/phantomjs.exe')

#访问目标网站
browser.get("https://www.douban.com/")

#输入检索关键字并搜索
search_input = browser.find_element_by_name('q')
search_input.send_keys("肖申克的救赎")
search_input.submit()

#等待关键字检索结果
browser.implicitly_wait(3)

#加载网站全部内容
content = browser.page_source.encode('utf-8')

#解析页面内容,获取图像标签
soup = BeautifulSoup(content, 'lxml')
img_tags = soup.find_all('img', {"src": re.compile(".*doubanio\.com.*")})

#定义存储文件夹的路径
folder_path = './images/'

#判断文件夹是否存在,不存在则新建
if not os.path.exists(folder_path):
    os.makedirs(folder_path)

#下载所有的图像
for img in img_tags:
    #获取图像的URL
    img_url = img['src']

    #下载图像并将其保存到指定的文件夹中
    response = requests.get(img_url)
    with open(folder_path + img_url.split('/')[-1], 'wb') as f:
        f.write(response.content)
        print("Downloaded image: ", img_url)

在以上代码中,我们使用了PhantomJS作为我们的浏览器解析器,使用了BeautifulSoup库来获取页面中包含“img”标签元素的标签列表,并通过使用requests库将所有的图像下载到一个单独的文件夹中。

示例2

接下来,我们再来看一个例子:我们将尝试爬取一个包含“延时加载”图片的网站。此类网站仅在用户滚动到图像位置时才加载显示该图像。如果我们在步骤3和4中执行遇到这种情况,那么我们只能爬取到在页面加载时就被加载的图片。幸运的是,PhantomJS提供了一个解决方案,它可以以模拟用户在浏览器中操作的方式来自动触发图片的延时加载。以下是这个示例的完整代码:

from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import os

#创建PhantomJS的web驱动
driver = webdriver.PhantomJS(executable_path='D:/Tools/phantomjs-2.1.1-windows/bin/phantomjs.exe')

#访问目标网站
driver.get("https://stackoverflow.com/questions/43085512/selenium-webdriver-get-all-elements-with-class-name")

#滚动窗口,自动加载所有延时加载图片
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

#加载网站全部内容
content = driver.page_source.encode('utf-8')

#解析页面内容,获取图像标签
soup = BeautifulSoup(content, 'lxml')
img_tags = soup.find_all('img', {"class": "load-lazy"})

#定义存储文件夹的路径
folder_path = './images/'

#判断文件夹是否存在,不存在则新建
if not os.path.exists(folder_path):
    os.makedirs(folder_path)

#下载所有的图像
for img in img_tags:
    #获取图像的URL
    img_url = img['data-src']

    #下载图像并将其保存到指定的文件夹中
    response = requests.get(img_url)
    with open(folder_path + img_url.split('/')[-1], 'wb') as f:
        f.write(response.content)
        print("Downloaded image: ", img_url)

以上代码中,仅在浏览器自动滚动到“document.body.scrollHeight”时才会加载所有的延时加载图片。在我们获取页面内所有的“img”标签元素时,我们将选择“class”属性中包含“load-lazy”的标签,并将它们存储在名为“img_tags”的变量组中。最后,我们将使用requests库从每个图像的URL中下载图像,并将其保存到一个名为“images”的文件夹中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫图片懒加载技术 selenium和PhantomJS解析 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 用Python输出一个杨辉三角的例子

    好的! Python可以很方便地输出杨辉三角,下面是完整的攻略。 步骤一:准备工作 在输出杨辉三角之前,我们需要先明确杨辉三角的构造方法。杨辉三角是由每个数字的两边相加得到的。 在 Python 中,我们可以使用嵌套列表来存储杨辉三角的数字,这样可以方便地进行对每个数字的计算和输出。具体实现方法如下: triangle = [[1], [1, 1]] 该代码…

    python 2023年6月5日
    00
  • Python编程之字符串模板(Template)用法实例分析

    Python编程之字符串模板(Template)用法实例分析 什么是字符串模板(Template)? Python中的字符串模板是一种通过简单的替换操作来生成最终文本的工具。使用字符串模板的好处是可以分离代码和文本,让代码更加易于修改和维护。字符串模板是一个支持占位符的文本,占位符可以被实际的值替换,占位符的类型有简单占位符和命名占位符。 简单占位符示例 以…

    python 2023年6月5日
    00
  • 基于python+selenium的二次封装的实现

    下面是基于python+selenium的二次封装的实现攻略: 一、什么是基于python+selenium的二次封装 基于python+selenium的二次封装是指在selenium的基础上,利用python语言的特性进行封装,以便于自己或他人在后续的测试过程中更加高效地使用selenium。 二、为什么要进行二次封装 基于Python+selenium…

    python 2023年6月3日
    00
  • python 实现全球IP归属地查询工具

    Python 实现全球IP归属地查询工具 前言 全球IP归属地查询工具是一个通过IP地址查询该IP地址所对应的地理位置的工具。在网络安全领域有着重要的应用,比如通过归属地查询来防止恶意攻击等。 准备工作 为了实现这个功能,我们需要使用到Python的第三方库pygeoip,这个库可以从IP地址中提取有价值的信息并且根据该IP地址获取该地址的归属地。我们可以使…

    python 2023年5月18日
    00
  • python使用正则搜索字符串或文件中的浮点数代码实例

    以下是“Python使用正则搜索字符串或文件中的浮点数代码实例”的完整攻略: 一、问题描述 在Python中,我们可以使用正则表达式来搜索字符串或文件中的浮点数。本文将详细讲解如何使用Python正则表达式搜索浮点数,并提供两个示例说明。 二、解决方案 2.1 使用正则表达式搜索浮点数 在Python中,我们可以使用正则表达式来搜索浮点数。以下是一个示例,演…

    python 2023年5月14日
    00
  • Python将一个Excel拆分为多个Excel

    下面是Python将一个Excel拆分为多个Excel的完整实例教程: 1. 准备工作 首先,你需要安装pandas库,它是一个数据分析库,可以方便地读取、操作和保存Excel文件。可以通过以下命令进行安装: pip install pandas 2. 读取Excel文件 我们先使用pandas库中的read_excel函数读取一个Excel文件,并将其转换…

    python 2023年5月13日
    00
  • 基于QT制作一个简易的传输文件小工具

    下面是基于QT制作一个简易的传输文件小工具的完整攻略。 1. 准备工作 首先,你需要安装QT开发环境。可以到官网(https://www.qt.io/download)下载安装包并安装。 2. 创建工程 打开QT Creator,选择”File” -> “New File or Project”,在弹出的窗口中选择”QT Widgets Applica…

    python 2023年6月5日
    00
  • python处理csv数据动态显示曲线实例代码

    让我们来详细讲解一下“Python处理CSV数据动态显示曲线实例代码”的完整攻略。这个过程分为以下步骤: 解决依赖 使用Python处理CSV数据动态显示曲线需要用到两个库,即matplotlib和pandas。你需要确保这两个库已经被正确安装在你的Python环境中。如果没有安装,可以使用如下命令进行安装: pip install matplotlib p…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部