利用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抓取必应图片相关推荐

  1. python实现抓取必应图片设置桌面

    源码参考https://github.com/vbirds/pyWallpaper,代码风格不错 本人只是将其适配到python3.5,并消除一些bug,源代码中桌面地址未使用绝对路径导致win10 ...

  2. Python利用bs4批量抓取网页图片并下载保存至本地

    Python利用bs4批量抓取网页图片并下载保存至本地 使用bs4抓取网页图片,bs4解析比较简单,需要预先了解一些html知识,bs4的逻辑简单,编写难度较低.本例以抓取某壁纸网站中的壁纸为例.(b ...

  3. python爬虫好友图片_利用Python网络爬虫抓取微信好友的签名及其可视化展示

    前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...

  4. python抓取网站图片_利用python抓取网站图片

    看了网上关于python抓取网站图片的例子,所以自己也尝试着写一个,但是发现这个网站的src不是标准的路径,需要自己添加前面的目录地址,尝试了几次也不成功,所以希望有经验的朋友指导下. 本人是初学者, ...

  5. php图片截取后缀,PHP抓取远程图片(含不带后缀的)教程详解

    一.创建项目 作为演示,我们在www根目录创建项目grabimg,创建一个类GrabImage.php和一个index.php. 二.编写类代码 我们定义一个和文件名相同的类:GrabImage cl ...

  6. python展示全部好友_利用Python网络爬虫抓取微信好友的签名及其可视化展示

    前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...

  7. python 全自动化爬取必应图片

    python 全自动化爬取必应图片 from selenium import webdriver import requests import time import re import urllib ...

  8. python爬虫微信朋友圈怎么发文字_如何利用Python网络爬虫抓取微信朋友圈的动态(上)...

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  9. python爬虫好友聊天记录_利用Python网络爬虫抓取微信好友的签名及其可视化展示...

    前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...

最新文章

  1. 10个深度学习软件的安装指南(附代码)
  2. MATLAB从入门到精通-控制系统动态特性的计算以及阶跃响应波德图等
  3. MySQL设置数据库的字符编码为utf8
  4. web控件开发系列(四) 自定义控件属性(下)
  5. 利用坐标变换证明惯性主轴方向是惯性矩的极值方向
  6. acfun html5 转换,AcFun剧场模式插件
  7. 武魂觉醒s系列服务器,斗罗大陆武魂觉醒斗罗大陆9服开服时间表_斗罗大陆武魂觉醒新区开服预告_第一手游网手游开服表...
  8. 洛谷P1461 海明码 Hamming Codes
  9. 利用交换机排查网络故障-检测数据流量法
  10. Google 正式发布 Fuchsia OS,Flutter 集成尚存问题
  11. 爬虫单个ip代理设置_代理IP是怎么帮助爬虫持续工作的
  12. 黑链 明链 暗链 简介
  13. 应用wms仓库管理系统,提高第三方物流企业竞争力
  14. Conda虚拟环境更新pip方法
  15. android twitter第三方登录,android中接入twitter进行第三方登录
  16. C++ 设计模式 面向对象设计原则 相关概念介绍(结合UnrealEngine4)
  17. 常用标点符号的英文名称
  18. python发送邮件函数
  19. 突变检测软件 测试数据库,突变测试—通过一个简单的例子快速学习这种有趣的测试技术...
  20. Python 文件目录操作

热门文章

  1. 【详细整理机房布线工艺,布出更快更漂亮的网线!】
  2. 二分算法详解:整数二分及浮点数二分算法(Binary Search)(含算法模板)
  3. 易文档(yidocs),更简单的markdown静态文档生成模板
  4. emqttd 2.2安装和测试使用
  5. 机械键盘用哪种轴的好?
  6. Required field ‘serverProtocolVersion‘ is unset! User: root is not allowed to impersonate root
  7. 【jmeter】 --- jmeter使用详解
  8. VTS-DEBUG VtsHalCameraProviderV2_4TargetTest CameraHidlTest.noHal1AfterP FAIL
  9. 使用css做水印效果
  10. contentprovider与resolver使用