Python 网络爬虫:初使用selenium爬取百度图片 | 您所在的位置:网站首页 › 点击百度图标 › Python 网络爬虫:初使用selenium爬取百度图片 |
初使用selenium爬取百度图片
文章目录
初使用selenium爬取百度图片前言一、selenium是什么?二、安装配置步骤1.环境:python 3.8,win 10以及chrome和其对应的chromedriver.exe2.安裝selenium库3.安裝配置chrome4.配置环境变量5.测试是否可用
三、分析编写代码1.分析(1)搜索框(2)点击百度一下按钮(3)点击美女图片
2.代码实现(1)访问代码(2)鼠标滑动向下浏览(3)该部分完整代码
2.提取图片链接(1)分析html页面(2)提取图片url(3)下载图片
3.完整代码
总结
前言
这周发生了很多悲伤的事情,一时间五味杂陈。不敢让自己停下,怕自己停下就会忍不住悲伤,继续向前走吧,这也许就是旅行的意义。 本文主要是初使用selenium,借助selenium方法来爬取百度的图片,在反爬机制日益增多的今天,像selenium这样的方法会给我们提供极大的便利。 一、selenium是什么?Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla Firefox,Safari,Google Chrome,Opera等。使用selenium最大的好处就是,我们可以直接拿到经过js渲染过的页面html,这样就省去破译js等难缠的部分。 二、安装配置步骤 1.环境:python 3.8,win 10以及chrome和其对应的chromedriver.exechromedriver.exe的下载地址:http://chromedriver.storage.googleapis.com/index.html,进入后选择自己chrome对应的版本下载即可。 而chrome的版本在如下位置可以找到: 代码如下: pip install selenium如果安装失败,请参考我那篇介绍pip命令的文章。如果安装成功,会有类似success的提示。 3.安裝配置chrome将下载安装好的chromedriver.exe放入机chrome浏览器文件路径里,如: 设置系统环境变量,将chrome的路径添加到Path中(具体步骤如下图)。 代码如下(示例): from selenium import webdriver url = "https://www.baidu.com/" driver = webdriver.Chrome() driver.get(url) driver.close()如果成功会自动调起chrome浏览器,并访问百度。 三、分析编写代码 1.分析正常我们打开百度搜索图片的正确方式应该是:百度导航—>输入关键词—》点击查找—》点击所有图片 例如: 代码如下: from selenium import webdriver import time # 控制chrome浏览器 driver = webdriver.Chrome() #窗口最大化 driver.maximize_window() # 输入网址 driver.get("https://www.baidu.com/") # 找到文本框,输入文字 driver.find_element_by_xpath('//*[@id="kw"]').send_keys("迪迦奥特曼图片") #找到按钮,单击 driver.find_element_by_xpath('//*[@id="su"]').click() #停一下,等待加载完毕 time.sleep(2) #找到a标签,单击 driver.find_element_by_xpath('//*[@id="1"]/h3/a').click() #停一下,等待加载完毕 time.sleep(2)这样我们便简单的实现了这个访问的过程,但还是有个小问题,那就是虽然打开了两个页面,但我们现在其实还停留在第一个页面上,因此我们需要切换一下窗口: #切换窗口,因为现在打开了一个窗口,目前还是在第1个窗口中 driver.switch_to.window(driver.window_handles[1]) (2)鼠标滑动向下浏览因为百度图片是异步加载,再用鼠标往下不断滑动的过程中,不断地增加图片,下面我们用Selenium+python自动化之js屏幕滑动,来模拟模拟人为鼠标滑轮滚动屏幕: scroll="document.documentElement.scrollTop=800"#垂直滚动 px scroll = "document.documentElement.scrollLeft=1000"#水平滚动 scroll="window.scrollTo(0,10000)"#滚动到指定坐标 scroll="window.scrollBy(0,100)"#滑动到相对坐标 scroll="window.scrollTo(0,document.body.scrollHeight)"#获取body的高度,滑到底部 document.body.scrollWidth 获取body宽度 driver.execute_script(scroll)在这里,笔者使用的是鼠标滑动到指定的坐标,这里已经提前验证过: window.scrollTo(0,10000)在这里,我们选择滑动10次: for i in range(10): #执行js driver.execute_script("window.scrollTo(0,10000)") time.sleep(1) (3)该部分完整代码 from selenium import webdriver from lxml import etree import os import time import requests import re import random headers = { "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36", } #创建文件夹 if not os.path.exists("./files/baidu"): os.makedirs("./files/baidu") def get_html(): # 控制chrome浏览器 driver = webdriver.Chrome() #窗口最大化 driver.maximize_window() # 输入网址 driver.get("https://www.baidu.com/") # 找到文本框,输入文字 driver.find_element_by_xpath('//*[@id="kw"]').send_keys("哆啦a梦图片") #找到按钮,单击 driver.find_element_by_xpath('//*[@id="su"]').click() #停一下,等待加载完毕 time.sleep(2) #找到a标签,单击 driver.find_element_by_xpath('//*[@id="1"]/h3/a').click() #停一下,等待加载完毕 time.sleep(2) #切换窗口,因为现在打开了一个窗口,目前还是在第1个窗口中 driver.switch_to.window(driver.window_handles[1]) for i in range(10): #执行js driver.execute_script("window.scrollTo(0,10000)") time.sleep(1) #获取页面html html = driver.page_source # 关闭 driver.quit() #保存html with open(f"./files/baidu.html", "w", encoding="utf-8") as file: file.write(html) return html if __name__ == '__main__': get_html()这样我们便得到了整个页面的html,下面我们只需要分析html,提取出我们想要的图片url即可。 2.提取图片链接 (1)分析html页面我们通过对html的分析不难发现,图片的url主要都是以下几种: data-imgurl="https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2709465685,1833449660&fm=11&gp=0.jpg" data-objurl="https://gss0.baidu.com/70cFfyinKgQFm2e88IuM_a/forum/w=580/sign=3ab3bea0ea50352ab16125006343fb1a/4d3fbdf082025aafa44fcfdcf8edab64034f1a50.jpg"我们访问以下试试: 效果如下: 这样便实现的使用selenium自动化的办法爬取了百度图片,以上是笔者对selenium方法的简单使用,更多深入的操作设置有待于我们继续学习。如果哪里有写误或没写清楚的地方,欢迎大家指正,相互学习,天天进步!共勉。 |
CopyRight 2018-2019 实验室设备网 版权所有 |