利用selenium与etree抓取必应图片
利用selenium与etree抓取必应图片
文章目录
- 利用selenium与etree抓取必应图片
- 一、导入库
- 二、selenium模拟网页滚动
- 三、etree解析selenium保存的网页内容
- 四、遍历img_url筛选出可访问的url
- 五、图片的下载
- 六、完整代码
- 七、运行效果截图
- 1、输入抓取类别,开始网页滚动
- 2、图片下载及网址打印
- 3、抓取结果
- 思路总结
一、导入库
import time
from lxml import etree
import requests
from fake_useragent import UserAgent
from selenium import webdriver
from selenium.webdriver.edge.options import Options
二、selenium模拟网页滚动
options = Options()options.add_argument('--headless')driver = webdriver.Edge(options=options) # 不打开浏览器界面,在内存中加载网页driver.get(url)roll = 1000while True:html_before = driver.execute_script('return document.documentElement.scrollTop')time.sleep(1)driver.execute_script(f'window.scrollTo(0,{roll})')time.sleep(1)html_after = driver.execute_script('return document.documentElement.scrollTop')roll += 2000print(html_after, html_before)if html_before == html_after:break# 模拟浏览器网页滚动,当下次滚动下界面像素值等于滚动前的值时,结束模拟网页滚动
每隔1秒滚动2000像素,直到网页滚动到底
实现代码参考自官方文档
三、etree解析selenium保存的网页内容
text = driver.page_source # 保存网页内容到textetree_html = etree.HTML(text)img_url = etree_html.xpath('//img/@src') # 利用etree解析保存网页内容中的图片网址
四、遍历img_url筛选出可访问的url
for i in range(0, len(img_url)):if i == 200:# 设定的保存数量,图片资源达到200时自动结束循环breakif img_url[i].startswith('http'): # 筛选可以访问的图片网址,部分图片网址不可访问print(img_url[i])Url = img_url[i]
string.startswith()
用于检测img_url列表中的每个元素是否以http开头
五、图片的下载
img_name = 'picture\\' + name + '{}.jpg'.format(number) # 图片保存到本地
with open(img_name, 'wb') as save_img:save_img.write(img)
将图片保存到picture文件夹
六、完整代码
import time
from lxml import etree
import requests
from fake_useragent import UserAgent
from selenium import webdriver
from selenium.webdriver.edge.options import Optionsdef picture_download():print("请输入要抓取的图片名称:")name = input() # 输入要抓取的图片类型url = 'https://cn.bing.com/images/search?q=' + name + '&first=1' # 图片url的网址来源options = Options()options.add_argument('--headless')driver = webdriver.Edge(options=options) # 不打开浏览器界面,在内存中加载网页driver.get(url)roll = 1000while True:html_before = driver.execute_script('return document.documentElement.scrollTop')time.sleep(1)driver.execute_script(f'window.scrollTo(0,{roll})')time.sleep(1)html_after = driver.execute_script('return document.documentElement.scrollTop')roll += 2000print(html_after, html_before)if html_before == html_after:break# 模拟浏览器网页滚动,当下次滚动下界面像素值等于滚动前的值时,结束模拟网页滚动text = driver.page_source # 保存网页内容到text# print(text)useragent = UserAgent()headers = {'User-Agent': useragent.random}etree_html = etree.HTML(text)img_url = etree_html.xpath('//img/@src') # 利用etree解析保存网页内容中的图片网址number = 0for i in range(0, len(img_url)):if i == 200:# 设定的保存数量,图片资源达到200时自动结束循环breakif img_url[i].startswith('http'): # 筛选可以访问的图片网址,部分图片网址不可访问print(img_url[i])Url = img_url[i]img = requests.get(url=Url, headers=headers).contentnumber += 1print('正在下载第{}张图片'.format(number))img_name = 'picture\\' + name + '{}.jpg'.format(number) # 图片保存到本地with open(img_name, 'wb') as save_img:save_img.write(img)driver.quit()if __name__ == '__main__':picture_download()
七、运行效果截图
1、输入抓取类别,开始网页滚动
此处输入的名称为你想抓取的任意图片
2、图片下载及网址打印
3、抓取结果
一共抓取了180张图片
思路总结
使用selenium模拟网页滚动,避免抓取数据不全的问题,再通过etree对抓取数据进一步处理,获取图片url,从而将图片保存到本地
利用selenium与etree抓取必应图片相关推荐
- python实现抓取必应图片设置桌面
源码参考https://github.com/vbirds/pyWallpaper,代码风格不错 本人只是将其适配到python3.5,并消除一些bug,源代码中桌面地址未使用绝对路径导致win10 ...
- Python利用bs4批量抓取网页图片并下载保存至本地
Python利用bs4批量抓取网页图片并下载保存至本地 使用bs4抓取网页图片,bs4解析比较简单,需要预先了解一些html知识,bs4的逻辑简单,编写难度较低.本例以抓取某壁纸网站中的壁纸为例.(b ...
- python爬虫好友图片_利用Python网络爬虫抓取微信好友的签名及其可视化展示
前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...
- python抓取网站图片_利用python抓取网站图片
看了网上关于python抓取网站图片的例子,所以自己也尝试着写一个,但是发现这个网站的src不是标准的路径,需要自己添加前面的目录地址,尝试了几次也不成功,所以希望有经验的朋友指导下. 本人是初学者, ...
- php图片截取后缀,PHP抓取远程图片(含不带后缀的)教程详解
一.创建项目 作为演示,我们在www根目录创建项目grabimg,创建一个类GrabImage.php和一个index.php. 二.编写类代码 我们定义一个和文件名相同的类:GrabImage cl ...
- python展示全部好友_利用Python网络爬虫抓取微信好友的签名及其可视化展示
前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...
- python 全自动化爬取必应图片
python 全自动化爬取必应图片 from selenium import webdriver import requests import time import re import urllib ...
- python爬虫微信朋友圈怎么发文字_如何利用Python网络爬虫抓取微信朋友圈的动态(上)...
今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...
- python爬虫好友聊天记录_利用Python网络爬虫抓取微信好友的签名及其可视化展示...
前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...
最新文章
- 10个深度学习软件的安装指南(附代码)
- MATLAB从入门到精通-控制系统动态特性的计算以及阶跃响应波德图等
- MySQL设置数据库的字符编码为utf8
- web控件开发系列(四) 自定义控件属性(下)
- 利用坐标变换证明惯性主轴方向是惯性矩的极值方向
- acfun html5 转换,AcFun剧场模式插件
- 武魂觉醒s系列服务器,斗罗大陆武魂觉醒斗罗大陆9服开服时间表_斗罗大陆武魂觉醒新区开服预告_第一手游网手游开服表...
- 洛谷P1461 海明码 Hamming Codes
- 利用交换机排查网络故障-检测数据流量法
- Google 正式发布 Fuchsia OS,Flutter 集成尚存问题
- 爬虫单个ip代理设置_代理IP是怎么帮助爬虫持续工作的
- 黑链 明链 暗链 简介
- 应用wms仓库管理系统,提高第三方物流企业竞争力
- Conda虚拟环境更新pip方法
- android twitter第三方登录,android中接入twitter进行第三方登录
- C++ 设计模式 面向对象设计原则 相关概念介绍(结合UnrealEngine4)
- 常用标点符号的英文名称
- python发送邮件函数
- 突变检测软件 测试数据库,突变测试—通过一个简单的例子快速学习这种有趣的测试技术...
- Python 文件目录操作
热门文章
- 【详细整理机房布线工艺,布出更快更漂亮的网线!】
- 二分算法详解:整数二分及浮点数二分算法(Binary Search)(含算法模板)
- 易文档(yidocs),更简单的markdown静态文档生成模板
- emqttd 2.2安装和测试使用
- 机械键盘用哪种轴的好?
- Required field ‘serverProtocolVersion‘ is unset! User: root is not allowed to impersonate root
- 【jmeter】 --- jmeter使用详解
- VTS-DEBUG VtsHalCameraProviderV2_4TargetTest CameraHidlTest.noHal1AfterP FAIL
- 使用css做水印效果
- contentprovider与resolver使用