使用Selenium和Python进行网页搜刮!

机器学习助长了当今的技术奇迹,例如无人驾驶汽车,太空飞行,图像和语音识别。但是,一位数据科学专业人员将需要大量数据来构建针对此类业务问题的健壮且可靠的机器学习模型。

网络刮硒

数据挖掘或收集数据是数据科学生命周期中非常原始的一步。根据业务需求,可能必须从SAP服务器,日志,数据库,API,在线存储库或Web等来源收集数据。

诸如Selenium之类的用于Web抓取的工具可以在相对较短的时间内抓取大量数据,例如文本和图像。

目录: -

什么是网页抓取

为什么要进行网页爬虫

Web爬网如何有用

什么是硒

设置和工具

使用Selenium Python实现图像Web报废

无头Chrome浏览器

放在一起

尾注

什么是网页抓取?:-

Web爬网(也称为“爬网”或“蜘蛛”)是一种通常从网站上的在线资源自动收集数据的技术。Web爬网是在相对较短的时间内获取大量数据的简便方法,但它给托管源的服务器增加了压力。

这也是许多网站不允许在其网站上抓取所有内容的主要原因之一。但是,只要不破坏在线资源的主要功能,就可以接受。

为什么要进行网页爬虫?–

人们可以利用网络上的大量数据来满足业务需求。因此,需要一种工具或技术来从Web收集此信息。这就是Web爬网概念发挥作用的地方。

Web爬网如何有用?–

网络抓取可以帮助我们提取有关客户,产品,人员,股票市场等的大量数据。

人们可以利用从电子商务门户网站,求职门户网站,社交媒体渠道等网站收集的数据来了解客户的购买模式,员工的流失行为和客户的情绪,然后再继续进行下去。

Python中用于Web的最流行的库或框架-报废是BeautifulSoup,Scrappy和Selenium。

在本文中,我们将讨论在Python中使用Selenium进行Web爬网。最重要的是,我们将看到如何从网络上收集图像,您可以使用这些图像来为深度学习项目构建训练数据。

什么是硒:–

Selenium是基于Web的开源自动化工具。硒主要用于工业测试,但也可以用于卷材刮削。我们将使用Chrome浏览器,但您可以在任何浏览器上试用,几乎是一样的。

图片来源

现在让我们看看如何使用硒进行Web爬取。

设置和工具:-

安装:

使用pip安装Selenium

点安装硒

使用conda安装Selenium

conda install -c conda-forge硒

下载Chrome驱动程序:

要下载网络驱动程序,您可以选择以下任意一种方法-

您可以从以下链接直接下载chrome驱动程序-https

: //chromedriver.chromium.org/downloads

或者,您可以使用下面的代码行直接下载驱动程序= webdriver.Chrome(ChromeDriverManager()。install())

您可以在此处找到有关硒的完整文档。文档非常不言自明,因此请务必阅读文档以利用Python中的硒元素。

以下方法将帮助我们在网页中查找元素(这些方法将返回列表):

find_elements_by_name

find_elements_by_xpath

find_elements_by_link_text

find_elements_by_partial_link_text

find_elements_by_tag_name

find_elements_by_class_name

find_elements_by_css_selector

现在,让我们编写一个Python代码从网络上抓取图像。

使用Selenium Python实现图像Web报废:–

步骤1: –导入库

导入操作系统

进口硒

从硒导入webdriver

导入时间

从PIL导入图片

进口io

汇入要求

从webdriver_manager.chrome导入ChromeDriverManager

从selenium.common.exceptions导入ElementClickInterceptedException

步骤2: –安装驱动程序

#Install Driver

driver = webdriver.Chrome(ChromeDriverManager()。install())

步骤3:–  指定搜索网址

#Specify Search URL

search_url =“ https://www.google.com/search?q= {q}&tbm = isch&tbs = sur%3Afc&hl = zh-CN&ved = 0CAIQpwVqFwoTCKCa1c6s4-oCFQAAAAAdAAAAABAC&biw = 1251&bih = 568 “

driver.get(search_url.format(q ='Car'))

我使用了这个特定的网址,因此您在使用许可或带有版权的图像时不会遇到麻烦。否则,您也可以将https://google.com用作搜索URL。

然后,在搜索URL中搜索Car。将链接粘贴到driver.get(“ Your Link Here”)函数中并运行单元格。这将为该链接打开一个新的浏览器窗口。

步骤4:– 滚动到页面末尾

#滚动到页面末尾

driver.execute_script(“ window.scrollTo(0,document.body.scrollHeight);”)time.sleep

(5)#sleep_between_interactions

这行代码将帮助我们到达页面的结尾。然后我们给睡眠时间5秒钟,这样我们就不会出现问题,我们试图从页面中读取尚未加载的元素。

步骤5:– 找到要从页面上抓取的图像

#找到要从当前页面抓取的图像

imgResults = driver.find_elements_by_xpath(“ // img [包含(@ class,'Q4LuWd')]”)

totalResults = len(imgResults)

现在,我们将获取特定页面上存在的所有图像链接。我们将创建一个“列表”来存储这些链接。因此,要执行此操作,请转到浏览器窗口,右键单击页面,然后选择“检查元素”或使用Ctrl + Shift + I启用开发工具。

现在,确定所有属性,例如class,id等。这在所有这些图像中都是通用的。

在我们的例子中,在所有这些图像中,类=“'Q4LuWd”是通用的。

步骤6:–提取每个图像的相应链接

尽我们所能,页面上显示的图像仍然是缩略图,而不是原始图像。因此,要下载每个图像,我们需要单击每个缩略图并提取与该图像相对应的相关信息。

#单击每个图像以提取其相应的链接以进行下载

img_urls = set()

对于我在  范围(0,LEN(imgResults)):

img = img结果尝试:

img.click()

time.sleep(2)

actual_images = driver.find_elements_by_css_selector('img.n3VNCb')

用于actual_image在actual_images:

如果actual_image.get_attribute( 'SRC')和'https'时在actual_image.get_attribute( 'SRC'):

img_urls.add(actual_image.get_attribute('src'))

除了ElementClickInterceptedException或ElementNotInteractableException作为err:

打印(错误)

因此,在上面的代码片段中,我们正在执行以下任务:

遍历每个缩略图,然后单击它。

使我们的浏览器进入休眠状态2秒钟(:P)。

查找与该图像相对应的唯一HTML标签以在页面上找到它

对于特定的图像,我们仍然可以获得不止一个结果。但是,我们对下载该图像的链接都感兴趣。

因此,我们遍历该图像的每个结果并提取其“ src”属性,然后查看“ src”中是否存在“ https”。通常,网络链接以“ https”开头。

步骤7:–下载并保存每个图像到目标目录

os.chdir('C:/ Qurantine / Blog / WebScrapping / Dataset1')

baseDir = os.getcwd()

对于我,URL在枚举(img_urls):

file_name = f“ {i:150} .jpg”

尝试:

image_content = requests.get(url).content

除外例外为E:

print(f“错误-无法下载{url} - {e} ”)

尝试:

image_file = io.BytesIO(image_content)

图片= Image.open(图片文件).convert('RGB')

file_path = os.path.join(baseDir,file_name)

使用open(file_path,'wb')as f:

image.save(f,“ JPEG”,质量= 85)

print(f“ SAVED- {url} -AT:{file_path} ”),

但例外为e:

print(f“错误-无法保存{url} - {e} ”)

现在终于为您的项目提取了图像 ??

注意:–一旦编写了正确的代码,那么浏览器就不再重要,您可以在没有浏览器的情况下收集数据,这被称为无头浏览器窗口,因此将以下代码替换为上一个。

无头Chrome浏览器

#Headless Chrome浏览器

从硒进口的webdriver

opts = webdriver.ChromeOptions()

opts.headless = True

驱动程序= webdriver.Chrome(ChromeDriverManager()。install())

在这种情况下,浏览器将不会在后台运行,这对于在生产环境中部署解决方案非常有帮助。

让我们将所有这些代码放入一个函数中,以使其更具可组织性,并实现相同的思想,为每个类别(例如汽车,马匹)下载100张图像。

这次我们将使用无头铬的想法编写代码。

放在一起:

步骤1 –导入所有必需的库

进口OS

进口硒

的硒进口webdriver的

进口时间

从PIL进口图片

进口的IO

进口要求

从webdriver_manager.chrome进口ChromeDriverManager

os.chdir('C:/ Qurantine / Blog / WebScrapping')

第2步–安装Chrome驱动程序

#安装驱动程序

opts = webdriver.ChromeOptions()

opts.headless =真实

driver = webdriver.Chrome(ChromeDriverManager()。install(),options = opts)

在此步骤中,我们将安装Chrome驱动程序,并使用无头浏览器进行网络抓取。

步骤3 –指定搜寻网址

search_url =“ https://www.google.com/search?q= {q}&tbm = isch&tbs = sur%3Afc&hl = zh-CN&ved = 0CAIQpwVqFwoTCKCa1c6s4-oCFQAAAAAdAAAAABAC&biw = 1251&bih = 568 ”

driver.get(search_url.format(q ='Car'))

我使用了这个特定的网址来抓取无版权的图像。

步骤4 –编写一个函数以将光标移到页面的末尾

def scroll_to_end(驱动程序):

driver.execute_script(“ window.scrollTo(0,document.body.scrollHeight);”)time.sleep

(5)#sleep_between_interactions

该代码段将向下滚动页面

第五步 编写函数以获取每个图像的URL

#没有许可证问题

def getImageUrls(name,totalImgs,driver):

search_url =“ https://www.google.com/search?q= {q}&tbm = isch&tbs = sur%3Afc&hl = zh-CN&ved = 0CAIQpwVqFwoTCKCa1c6s4-oCFQAAAAAdAAAAABAC&biw = 1251&bih = 568 ”

driver.get(search_url.format(q = name))

img_urls = set()

img_count = 0

results_start = 0

while(img_count

scroll_to_end(驱动程序)

thumbnail_results = driver.find_elements_by_xpath(“ // img [包含(@ class,'Q4LuWd')]”)

totalResults = len(thumbnail_results)

打印(F “值:{}使用totalResults搜索结果中提取从链接{results_start} :{使用totalResults} ”)

为IMG在thumbnail_results [results_start:使用totalResults]:

img.click()

time.sleep(2)

actual_images = driver.find_elements_by_css_selector('img.n3VNCb')

用于actual_image在actual_images:

如果actual_image.get_attribute( 'SRC')和'https'时在actual_image.get_attribute( 'SRC'):

img_urls.add(actual_image.get_attribute('src'))

img_count = len(img_urls)

如果img_count> = totalImgs:

print(f“ Found:{img_count}图片链接”)

打破

其他:

print(“ Found:”,img_count,“寻找更多图像链接...”)

load_more_button = driver.find_element_by_css_selector(“。mye4qd”)

driver.execute_script(“ document.querySelector('。mye4qd')。click();”)

results_start = len(缩略图结果)

返回img_urls

此函数将返回每个类别(例如汽车,马匹等)的URL列表。

步骤6:编写一个功能来下载每个图像

def downloadImages(文件夹路径,文件名,URL):

尝试:

image_content = requests.get(url).content

除外例外为E:

print(f“错误-无法下载{url} - {e} ”)

尝试:

image_file = io.BytesIO(image_content)

图片= Image.open(图片文件).convert('RGB')

file_path = os.path.join(文件夹路径,文件名)

使用open(file_path,'wb')as f:

image.save(f,“ JPEG”,质量= 85)

print(f“ SAVED- {url} -AT:{file_path} ”),

但例外为e:

print(f“错误-无法保存{url} - {e} ”)

此代码段将从每个URL下载图像。

步骤7:–编写函数以将每个图像保存在目标目录中

高清saveInDestFolder(searchNames,DESTDIR,totalImgs,驱动程序):

为名称的列表(searchNames):

path = os.path.join(destDir,name)

如果不是os.path.isdir(path):

os.mkdir(路径)

打印('当前路径',路径)

totalLinks = getImageUrls(名称,totalImgs,驱动程序)

打印('totalLinks',totalLinks)

如果totalLinks为None:

打印('找不到图像:',名称)

继续

else:

对于i,在enumerate(totalLinks)中链接:

file_name = f“ {i:150} .jpg”

downloadImages(路径,文件名,链接)

searchNames = ['汽车','马']

destDir = f'./ Dataset2 /'

totalImgs = 5

saveInDestFolder(searchNames,destDir,totalImgs,驱动程序)

此代码段会将每个图像保存在目标目录中。

题库

python 数据挖掘 网页_使用Selenium和Python进行网页搜刮!相关推荐

  1. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  2. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  3. python 批量下载 代码_Python + Selenium +Chrome 批量下载网页代码修改

    Python + Selenium +Chrome 批量下载网页代码修改 主要修改以下代码可以调用 本地的 user-agent.txt 和 cookie.txt 来达到在登陆状态下 批量打开并下载网 ...

  4. Python之网络爬虫(selenium爬取动态网页、爬虫案例分析、哈希算法与RSA加密)

    文章目录 一.selenium爬取动态网页 二.爬虫案例分析 三.哈希hash算法与RSA加密 一.selenium爬取动态网页 1.动态网页认知 爬虫其实就是在模仿浏览器的行为 应对要多次数据的交互 ...

  5. python获取渲染之后的网页_使用Pyppeteer抓取渲染网页

    Pyppeteer是Puppeteer的非官方Python支持,Puppeteer是一个无头JavaScript的基于Chrome/Chromium浏览器自动化库,可以用于对渲染网页的抓取. 比较了P ...

  6. python 做网页_听过最近Python过气了?

    Python过气了? 怎么可能?! 会Python的人,工作都不会太差.作为职场"新晋网红",Python在各行各业中扮演着越来越重要的角色. 曾经Excel在金融.数据岗位&qu ...

  7. python 数据挖掘工具_推荐19款最常用的数据挖掘工具

    数据在当今世界意味着金钱.随着向基于app的世界的过渡,数据呈指数增长.然而,大多数数据是非结构化的,因此需要一个过程和方法从数据中提取有用的信息,并将其转换为可理解的和可用的形式. 数据挖掘或&qu ...

  8. selenium 解析网页_用Selenium进行网页搜刮

    selenium 解析网页 网页抓取系列 (WEB SCRAPING SERIES) 总览 (Overview) Selenium is a portable framework for testin ...

  9. 虫术python绝技下载_《虫术——Python绝技》梁睿坤著【摘要 书评 在线阅读】-苏宁易购图书...

    商品参数 作者: 梁睿坤著 出版社:电子工业出版社 出版时间:2018.6.30 版次:1 开本:16 ISBN:9787121344565 版权提供:电子工业出版社 基本信息 书名:虫术--Pyth ...

最新文章

  1. Lua和C语言的交互——C API
  2. 运行caffe自带的mnist实例教程
  3. jvm性能调优实战 - 38System.gcy引发的惨案
  4. tensorflow实现原理
  5. ELK学习1_开源分布式搜索平台ELK+Redis+Syslog-ng实现日志实时搜索
  6. python 分类变量转为哑变量_python 虚拟变量
  7. 递推(hdu2563)
  8. linux gdb打印内存命令,gdb中查看内存方法总结
  9. 使用face-api和Tensorflow.js进行预训练的AI情绪检测
  10. @程序员,你的编程方式已过时,云开发时代来临!
  11. windows 游戏编程 一windows 编程
  12. 看完这篇文章后,妈妈再也不用担心我搞不懂java中的接口和监听器啦
  13. 高性能计算服务器计算费价格,高性能计算云服务器价格表
  14. Why my APNs push certificate did not work?
  15. 拷贝出师表到另一个文件,恢复顺序
  16. 录屏鼠标光标圆圈如何实现_录屏鼠标光标圆圈如何实现
  17. OpenCV图像梯度——Scharr算子(cv2.Scharr())
  18. Svn修改自己已经提交的备注
  19. VMware虚拟化- vCenter CPU 内存 资源池和vAPP理论及应用
  20. 【Android -- SDK】高德地图的使用

热门文章

  1. Vue 原理以及运行机制
  2. [Java学习] DFS算法示例
  3. R语言画图之——expression
  4. 软件过程--XP 与 RUP 的比较与分析
  5. 开发者工具F12指南
  6. 连云港php培训学校,连云港php培训
  7. SpringBoot整合Mybatis+人大金仓(kingbase8)
  8. OpenStack组件部署之Glance
  9. 报错:ModuleNotFoundError: No module named ‘werkzeug.useragents‘
  10. ID3算法决策树(java实现)