爬虫(四)Selenium + Headless Chrome爬取Bing图片搜索结果
Bing图片搜索结果是动态加载的,如果我们直接用requests去访问页面爬取数据,那我们只能拿到很少的图片。所以我们使用Selenium + Headless Chrome来爬取搜索结果。在开始前,需要介绍一下xpath。
XPath
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。使用它让我们可以很方便地定位页面中的各种元素。详细使用方法可以看这里。
实例
from selenium import webdriver
from selenium.webdriver.common.by import By
import json
import re
import requests
import os chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
driver = webdriver.Chrome(options=chrome_options)
word = '深秋壁纸'
url = 'https://cn.bing.com/images/search?q={}'.format(word)
save_folder = 'imgs'
if not os.path.exists(save_folder):
os.makedirs(save_folder) driver.get(url)
# 获取一行图片
rows = driver.find_elements_by_class_name("dgControl_list")
t = 0
# 只点击一次“更多图片”
mark = True
while mark or t != len(rows):
if t == len(rows):
# 找到class为“mm_seemore”的div下的第一个a标签
element = driver.find_element_by_xpath("//div[@class='mm_seemore']/a[1]")
# 用JS模拟点击
driver.execute_script("arguments[0].click()", element)
mark = False
# 翻到页面底部
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
driver.implicitly_wait(0.5)
t = len(rows)
rows = driver.find_elements_by_class_name("dgControl_list")
print(t) img_url_list = []
for row in rows:
# 找到图片所在的a标签
a_list = row.find_elements(By.XPATH, "li/div/div/a")
for tag in a_list:
# 获取图片链接
img_url_list.append(json.loads(tag.get_attribute('m'))['murl'])
driver.quit()
for i in range(len(img_url_list)):
try:
img = requests.get(img_url_list[i], timeout=10).content
# 获取图片格式
img_format = re.search(r'\.\w+$', img_url_list[i])[0]
except Exception as e:
print(e)
continue
with open('{}/{}{}.{}'.format(save_folder, word, i, img_format[1:]), 'wb') as f:
print('{}{}.{}'.format(word, i, img_format[1:]))
f.write(img)
除了爬取动态页面,我们也完全可以用Selenium + Headless Chrome爬取其他页面。但是因为需要模拟浏览器,加载页面的各种文件,这种方法开销极大。所以如果不是必要,一般都使用开销更小的requests,毕竟绝大多数时候使用requests就能获取到我们想要的数据。另外,用单线程一张张获取图片很慢,如果有兴趣可以自己改成多线程来运行。
爬虫(四)Selenium + Headless Chrome爬取Bing图片搜索结果的更多相关文章
- 爬虫(三)通过Selenium + Headless Chrome爬取动态网页
一.Selenium Selenium是一个用于Web应用程序测试的工具,它可以在各种浏览器中运行,包括Chrome,Safari,Firefox 等主流界面式浏览器. 我们可以直接用pip inst ...
- 一起学爬虫——使用selenium和pyquery爬取京东商品列表
layout: article title: 一起学爬虫--使用selenium和pyquery爬取京东商品列表 mathjax: true --- 今天一起学起使用selenium和pyquery爬 ...
- Python爬虫初探 - selenium+beautifulsoup4+chromedriver爬取需要登录的网页信息
目标 之前的自动答复机器人需要从一个内部网页上获取的消息用于回复一些问题,但是没有对应的查询api,于是想到了用脚本模拟浏览器访问网站爬取内容返回给用户.详细介绍了第一次探索python爬虫的坑. 准 ...
- Python爬虫学习(6): 爬取MM图片
为了有趣我们今天就主要去爬取以下MM的图片,并将其按名保存在本地.要爬取的网站为: 大秀台模特网 1. 分析网站 进入官网后我们发现有很多分类: 而我们要爬取的模特中的女模内容,点进入之后其网址为:h ...
- Python 爬虫实例(1)—— 爬取百度图片
爬取百度图片 在Python 2.7上运行 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: loveNight import jso ...
- 【Python网络爬虫四】通过关键字爬取多张百度图片的图片
最近看了女神的新剧<逃避虽然可耻但有用>,同样男主也是一名程序员,所以很有共鸣 被大只萝莉萌的一脸一脸的,我们来爬一爬女神的皂片. 百度搜索结果:新恒结衣 本文主要分为4个部分: 1.下载 ...
- 第十五节:Web爬虫之selenium动态渲染爬取
selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firef ...
- Scrapy爬取美女图片第四集 突破反爬虫(上)
本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...
- 实现selenium+Chrome爬取时不加载图片——配置
# -*- coding:utf-8 -*- from selenium import webdriver ''' 设置页面不加载图片,这样可以加快页面的渲染,减少爬虫的等待时间,提升爬取效率 固定配 ...
随机推荐
- PAT甲级——A1134 Vertex Cover【25】
A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at le ...
- MongoDB特性及使用场景
概述 MongoDB(Humongous Database),中文意思就是巨大无比的数据库,顾名思义,MongoDB就是为处理大数据而生,以解决海量数据的存储和高效查询使用为使命.MongoDB是一款 ...
- Python3中面向对象 OOP
Python3中面向对象 OOP 定义: python中通过关键字 class 实现类的定义: class ClassName(object): pass 获取成员变量:ClassName.变量名 修 ...
- 关于priority_queue和sort()对结构体数组的排序
知乎的这个答案很清晰https://www.zhihu.com/question/35736022 #include <iostream> #include <algorithm&g ...
- Jquery 遍历 Table;遍历CheckBox ;遍历Select;全选/全不选
关于Jquery:相信大家已经很熟悉了,我最近的项目运用到关于Jquery的遍历事件:权当总结下: 遍历Table <table id="thistab"> < ...
- 属性面板:tabcontroller
Tabcontroller 布局 Anchor 设置控件距离选定方向固定: Dock 定义要绑定到容器的控件边框 Location 设置控件对于容器左上角的坐标 Margin 指定此控件与另一控件边距 ...
- SpringCloud学习笔记《---03 Ribbon Rule---》核心篇
- 【珍惜时间】vue-websocket
这个项目可能是个有始无终的项目?跟我一起分析吧,比较简单的一个项目 另外,我也想跟自己说,我好像失去了那个努力的自己了.要珍惜时间,好好加油啊~ 项目地址为:https://github.com/xi ...
- 设置IDEA中properties文件显示中文
路径: File - Setting - Editor - Code Style - File Encodings
- mybatis结果封装到hashmap中没有null的数据
1.在ssm框架中 在mybatis-config.xml配置文件中加下面这句代码即可解决 <setting name="callSettersOnNulls" value= ...