首页 > 编程语言 >基于Selenium库的python爬虫脚本,爬取painterest上的图片

基于Selenium库的python爬虫脚本,爬取painterest上的图片

时间:2023-06-04 18:55:05浏览次数:48  
标签:src python driver Selenium 爬取 url directory import 图片

基于Selenium库的python爬虫脚本,爬取painterest上的图片

  • 问题背景

    Pinterest是一个社交媒体平台,它提供了一个虚拟的个人兴趣画板,让用户可以收集和分享他们喜欢的图片、视频和链接。上面有许多优秀的图片供浏览和下载,但是一个个点图片下载非常麻烦。于是想要用Python语言写一个自动化脚本,可以根据给定的pinterest的url对页面内的所有图片进行爬取。

  • 问题分析

    Pinterest网站上爬取图片要结合该网站的特点(工程要结合实际~),首先该网站图片链接放在html代码里的img标签下的src参数里,其次用户向下滑动页面可以查看更多的图片。

    结合这两个特点,我们可以使用Selenium库来完成脚本。

    Selenium是一个用于自动化网页浏览器操作的Python库。它提供了一组API,可以通过编写Python代码来控制和操作Web浏览器。Selenium最常用的用途之一是进行Web应用程序的自动化测试,但它也可以用于执行各种Web操作,例如网页截图、表单填写、数据提取等。

    Selenium支持多种浏览器,包括Chrome、Firefox、Safari和Edge等。它使用浏览器的原生支持或者驱动程序来与浏览器进行交互,并模拟用户在浏览器中的行为,例如点击链接、填写表单、提交数据等。

    使用Selenium,您可以编写Python脚本来自动化执行各种Web任务,例如自动登录网站、抓取网页内容、执行交互式操作等。它提供了丰富的功能和灵活的选项,使得Web自动化变得相对简单和可靠。

    ——ChatGPT

    脚本的执行流程大致如下:

    1. 获取图片链接
    2. 根据链接下载图片到本地
    3. 向下滑动页面
    4. 如果没有到达页面底部则返回第一步
  • 代码解释

    下面开始逐步用代码操作

    • 首先导入Selenium库,requests库等相关库

      from selenium import webdriver
      from selenium.webdriver.common.by import By
      import urllib.request
      import requests
      from urllib.parse import urljoin, urlparse
      import os
      import time
      
    • 给出网站URL和图片保存的本地目录

      # 网站URL
      url = "https://www.pinterest.com/search/pins/?q=%E7%8C%AB&rs=typed" #以猫的图片为例
      # 图片保存目录
      directory = ""
      if not os.path.exists(directory):
          os.makedirs(directory)
      
    • 使用Selenium库创建浏览器实例,以Chorme浏览器为例

      driver = webdriver.Chrome()
      driver.get(url)
      
    • 获取页面名字为img的所有标签,并提取属性src内容,与url组成图片的绝对链接

      images = driver.find_elements(By.TAG_NAME, "img")
      src = image.get_attribute("src")
      absolute_src = urllib.parse.urljoin(url, src)
      
    • 将缩略图的链接换成原图的链接,同时还可以排除无关图像(pinterest链接中'236x'代表缩略图,改成'originals'就是原图了),然后下载图像

      if '236x' in absolute_src:
                      absolute_src = absolute_src.replace('236x', 'originals')
                      download_image(absolute_src, directory)
      
    • 使用JS判断是否到达底部,当浏览器当前可视区域的高度+页面在垂直方向上的滚动距离>=整个页面的高度时,就代表到达了页面底部

      if driver.execute_script("return window.innerHeight + window.pageYOffset >= document.body.scrollHeight;"):
                  break
      
    • 向下滚动页面。window.scrollBy(0, 1000)代表在水平方向不移动,垂直方向向下移动1000像素,注意这个1000像素只是参考值,需要自行调试获得最佳的下滑距离,不会出现重复图片也不会漏掉图片。

      driver.execute_script("window.scrollBy(0, 1000);") # 每次垂直滑动1000像素
      time.sleep(2) # 等待图片加载
      
    • 下载图像

      def download_image(url, directory):
          response = requests.get(url, stream=True)
          if response.status_code == 200:
              # 获取文件名
              filename = os.path.join(directory, os.path.basename(urlparse(url).path))
              # 保存图片
              with open(filename, 'wb') as file:
                  for chunk in response.iter_content(1024):
                      file.write(chunk)
              print("Downloaded:", url)
      
  • 完整代码展示

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import urllib.request
    import requests
    from urllib.parse import urljoin, urlparse
    import os
    import time
    
    def download_image(url, directory):
        response = requests.get(url, stream=True)
        if response.status_code == 200:
            # 获取文件名
            filename = os.path.join(directory, os.path.basename(urlparse(url).path))
            # 保存图片
            with open(filename, 'wb') as file:
                for chunk in response.iter_content(1024):
                    file.write(chunk)
            print("Downloaded:", url)
    
    
    def main():
        # 网站URL
        url = "https://www.pinterest.com/search/pins/?q=%E7%8C%AB&rs=typed"
        # 图片保存目录
        directory = "D:\EdgeDownloads\Cat"
        if not os.path.exists(directory):
            os.makedirs(directory)
        # 创建浏览器实例
        driver = webdriver.Chrome()
        driver.get(url)
        while True:
            images = driver.find_elements(By.TAG_NAME, "img")
            for image in images:
                src = image.get_attribute("src")
                absolute_src = urllib.parse.urljoin(url, src)
                if '236x' in absolute_src:
                    absolute_src = absolute_src.replace('236x', 'originals') # pinterest链接中'236x'代表缩略图,改成'originals'才是原图
                    download_image(absolute_src, directory)
            # 判断是否到达页面底部
            if driver.execute_script("return window.innerHeight + window.pageYOffset >= document.body.scrollHeight;"):
                break
            driver.execute_script("window.scrollBy(0, 1000);") # 每次垂直滑动1000像素
            time.sleep(2) # 等待图片加载
        driver.quit()
    
    if __name__ == '__main__':
        main()
    

标签:src,python,driver,Selenium,爬取,url,directory,import,图片
From: https://www.cnblogs.com/Marches7/p/17456113.html

相关文章

  • Python爬虫入门六之Cookie的使用
     大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用。为什么要使用Cookie呢?Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个......
  • 如何防止网站被爬虫爬取的几种办法
     今天想对一个问题进行分析和讨论,就是关于爬虫对网站页面爬取的问题,有些网站通过爬虫去采集其它的网站页面信息作为己用,大量的爬取行为会对web服务器有比较性能有影响,主要的表现就是会变得很慢。对于如何防止网站被爬取,我想从以下几种方法去分析:1.基于程序本身去防止爬取:作为爬虫......
  • python中生产者和消费者理论
    1.模型理论生产者消费者他是一个概念,(由于生产者消费者模型并不局限于某一类技术,因此,有多种实现方式)所以,代码很简单,所以这里首先要弄懂理论。 1.1 生产者消费者模型模型指的是一种解决问题的套路。 1.2生产者消费者模型中包含两类重要角色一类叫生产者,另一类叫消费者......
  • python环境 anaconda安装
    官网:https://www.anaconda.com/distribution/#macos国内镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/安装时注意勾选:安装后,加入国内源:condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/condaconfig--setshow_cha......
  • python 列表,元组,字典
    列表 list[]print("更新")list=[]list.append("aa")list.append('bb')print(list)print("删除")dellist[1]print(list)print(len([1,2,3]))print([1,2,3]+[4,5,6])print(["a"]*3)print(3in[1,2,3])forxi......
  • 网络爬虫--爬取泉州,福州,厦门历史天气和近七日天气--数据可视化
     一:选题背景:通过爬取各个城市的历史天气数据及近日数据,来进行对天气的数据分析与可视化。从而帮助我们的生活更加便利。所爬取的网站为2345天气王https://tianqi.2345.com/wea_forty/71924.htm这里我们进入网站后右键检查,点击网络这一栏,并刷新页面能够看到有两个文件,而我们所......
  • nodejs vuejs java python 入门到高级视频
    多抽出一分钟学习,让你的生命更加精彩!高性能高可用Yii2.0电商平台仿京东商城高级组件MySQLLVSDocker+Kubernetes(k8s)微服务容器化实战实战Docker到Kubernetes技术系列视频教程@黑马JAVAEE19期⑭jQuery实战经典【No0066】尚学堂架构师视频06、微服务架构00、SpringBoot微服务架......
  • python基础学习-读写CSV文件
    CSV文件介绍参考:Python-Core-50-Courses/第23课:用Python读写CSV文件.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)CSV 全称逗号分隔值文件是一种简单、通用的文件格式,被广泛的应用于应用程序(数据库、电子表格等)数据的导入和导出以及异构系统之间的数据......
  • python基础学习-发送邮件
    importsmtplibfromemail.headerimportHeaderfromemail.mime.multipartimportMIMEMultipartfromemail.mime.textimportMIMEText"""发送普通邮件"""#创建邮件主体对象email=MIMEMultipart()#设置发件人、收件人和主题email['From']=&#......
  • python基础学习-XPath解析html
    参考地址:Python-Core-50-Courses/第33课:用Python解析HTML页面.mdatmaster·jackfrued/Python-Core-50-Courses(github.com) XPath是在XML(eXtensibleMarkupLanguage)文档中查找信息的一种语法,XML跟HTML类似也是一种用标签承载数据的标签语言,不同之处在于XML的标签......