当前位置: 首页 > news >正文

网站建设与维护工作内容外贸网站适合用数字域名吗

网站建设与维护工作内容,外贸网站适合用数字域名吗,安卓排名优化,东莞住建网本文主要针对python使用urlretrieve或urlopen下载百度、搜狗、googto#xff08;谷歌镜像#xff09;等图片时#xff0c;出现无法打开图片或已损坏的问题#xff0c;作者对它进行简单的探讨。同时#xff0c;作者将进一步帮你巩固selenium自动化操作和urllib…本文主要针对python使用urlretrieve或urlopen下载百度、搜狗、googto谷歌镜像等图片时出现无法打开图片或已损坏的问题作者对它进行简单的探讨。同时作者将进一步帮你巩固selenium自动化操作和urllib库等知识。 一. 引入Selenium自动爬取百度图片 下面这部分Selenium代码的主要功能是             1.先自动运行浏览器并访问百度图片链接百度图片-发现多彩世界             2.通过driver.find_element_by_xpath()函数获取输入框的位置             3.在输入框中自动输入搜索关键词邓肯再输入回车搜索邓肯相关图片             4.再通过find_element_by_xpath()获取图片的原图url这里仅获取一张图片             5.调用urllib的urlretrieve()函数下载图片。         最后整个动态效果如下图所示但是图片却无法显示 代码如下  # -*- coding: utf-8 -*- importurllib   importre   importtime   importos   fromselenium import webdriver             fromwebdriver.common.keys importKeys    importwebdriver.support.ui as ui   fromwebdriver.common.action_chains importActionChains           #Open PhantomJS #driver  webdriver.PhantomJS(executable_pathG:\phantomjs-1.9.1-windows\phantomjs.exe)   driver  webdriver.Firefox()    wait  ui.WebDriverWait(driver,10)  #Search Picture By Baidu url  http://image.baidu.com/ name  u邓肯 get(url)   elem_inp  driver.find_element_by_xpath(//form[idhomeSearchForm]/span[1]/input)     send_keys(name)     send_keys(Keys.RETURN)   sleep(5)  #Get the URL of Pictures #elem_pic  driver.find_element_by_xpath(//div[classimgpage]/ul/li/div/a) elem_pic  driver.find_element_by_xpath(//div[classimgpage]/ul/li/div/a/img)   elem_url  elem_pic.get_attribute(src)   printelem_url  #Download Pictures get(elem_url)   urlretrieve(elem_url,picture.jpg)   printDownload Pictures!!! 二. 简单分析原因及知识巩固 1.urllib.urlretrieve()        通过urlretrieve()函数可设置下载进度发现图片是一下子就加载的。这里给大家巩固这个urlretrieve函数的方法和Python时间命名方式代码如下 # -*- coding: utf-8 -*- importurllib   importtime   importos  #显示下载进度 defschedule(a,b,c):   #a:已下载的数据块 b:数据块的大小 c:远程文件的大小   per  100.0 * a * b / c   ifper  100 :   per  100   print%.2f%% % per  if__name__  __main__:   url  http://img4.imgtn.bdimg.com/it/u3459898135,859507693fm11gp0.jpg #定义文件名时间命名   t  time.localtime(time.time())   #反斜杠连接多行 filename  str(t.__getattribute__(tm_year))  _ \   str(t.__getattribute__(tm_mon))  _ \   str(t.__getattribute__(tm_mday))   target  %s.jpg% filename   printtarget   urlretrieve(url,target,schedule)   printDownload Picture!!!   发现该图片的大小仅为168字节其中输出结果如下图获取的URL地址如下页面不存在_百度搜索  而换张图片是能显示下载进度的如我的头像。显然我想让程序加个进度就能爬取图片的想法失败。头像地址https://avatar.csdn.net/F/8/5/1_eastmount.jpg 猜测可能获取的百度URL不是原图地址或者是个服务器设置了相应的拦截或加密。参考Python爬虫抓取网页图片函数相关介绍如下 help(urllib.urlretrieve)   Help on function urlretrieve inmodule urllib:   urlretrieve(url, filenameNone, reporthookNone, dataNone)  参数url 指定的下载路径   参数finename   指定了保存本地路径如果参数未指定urllib会生成一个临时文件保存数据。   参数reporthook   是一个回调函数当连接上服务器、以及相应的数据块传输完毕时会触发该回调 我们可以利用这个回调函数来显示当前的下载进度。 参数data 指post 到服务器的数据该方法返回一个包含两个元素的(filename, headers)元组   filename 表示保存到本地的路径header 表示服务器的响应头。 2.urllib2.urlopen()        换个方法urlopen()实现同时设置消息头试试并输出信息和图片大小。 # -*- coding: utf-8 -*- importos         importsys       importurllib   importurllib2  #设置消息头 url  http://img4.imgtn.bdimg.com/it/u3459898135,859507693fm11gp0.jpg header  {   User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) \   AppleWebKit/537.36 (KHTML, like Gecko) \   Chrome/35.0.1916.114 Safari/537.36,   Cookie: AspxAutoDetectCookieSupport1 }   request  urllib2.Request(url, None, header)   response  urllib2.urlopen(request)   printheaders[Content-Length]  with open(picture.jpg,wb) as f:   write(response.read())   printgeturl()   printinfo()    #返回报文头信息 printurlopen(url).read()   返回内容是”HTTPError: HTTP Error 403: Forbidden“Selenium打开如下 其中403错误介绍如下服务器拒绝服务 换成我的博客图像那张图是能下载的同时设置消息头和代理推荐一篇文章         [Python]网络爬虫五urllib2的使用细节与抓站技巧 三. 解决方法 主要参考三篇文章和自己的一些想法         seleniumpython 爬取网络图片(2) -- 百度         Python 3 多线程下载百度图片搜索结果         CSDN博客搬家到WordPress  - curl设置headers爬取         第一个方法 F12审查元素和SRC的骗局         这是感谢露为霜同学提供的方法如果你通过浏览器点开百度搜索邓肯的第一张图片复制网址后会发现图片真实的地址为         http://gb.cri.cn/mmsource/images/2015/11/22/sb2015112200073.jpg         此时你再分析百度搜索页面你会发现F12审查元素和获取src元素的行为欺骗了你正是因为它俩定位到了错误的图片链接。而真实的URL是在ul/li/中的data-objurl属性中。         代码如下  # -*- coding: utf-8 -*- importurllib   importre   importtime   importos   fromselenium import webdriver             fromwebdriver.common.keys importKeys   importwebdriver.support.ui as ui           fromwebdriver.common.action_chains importActionChains  #Open PhantomJS #driver  webdriver.PhantomJS(executable_pathG:\phantomjs-1.9.1-windows\phantomjs.exe)   driver  webdriver.Firefox()    wait  ui.WebDriverWait(driver,10)  #Search Picture By Baidu url  http://image.baidu.com/ name  u邓肯 get(url)   elem_inp  driver.find_element_by_xpath(//form[idhomeSearchForm]/span[1]/input)     send_keys(name)     send_keys(Keys.RETURN)   sleep(5)  #Get the URL of Pictures num  1   elem_pic  driver.find_elements_by_xpath(//div[classimgpage]/ul/li)   forelem inelem_pic:   elem_url  elem.get_attribute(data-objurl)   printelem_url   #Download Pictures name  %03d% num   urlretrieve(elem_url, str(name)  .jpg)   num  num  1   else:   printDownload Pictures!!!   运行代码成功爬取了9张图片显然成功了虽然最后报错IOError: [Errno socket error] [Errno 10060] 只爬取了9张图片但是至少可以正确解决了该问题。运行截图如下所示 同样的道理googto的elem.get_attribute(src)改成elem.get_attribute(data-imgurl)即可获取正确的图片地址并正确下载。         PS百度图片动态加载的功能是非常强大的当你的鼠标拖动时它会自动增加新的页面在ul中包括新的一批li张图片这也是不同于其它网页在右下角点击1、2、3...翻页的可能也会成为海量图片爬取的又一难点。         第二个方法 Selenium使用右键另存为         还是使用老的链接虽然读取是无法显示的但尝试通过Selenium的鼠标右键另存为功能看能不能爬取成功。 # -*- coding: utf-8 -*- importurllib   importre   importtime   importos   fromselenium import webdriver             fromwebdriver.common.keys importKeys   importwebdriver.support.ui as ui           fromwebdriver.common.action_chains importActionChains  #Open PhantomJS  driver  webdriver.Firefox()   wait  ui.WebDriverWait(driver,10)  #Search Picture By Baidu url  http://image.baidu.com/ name  u邓肯 get(url)   elem_inp  driver.find_element_by_xpath(//form[idhomeSearchForm]/span[1]/input)     send_keys(name)     send_keys(Keys.RETURN)   sleep(5)  #Get the URL of Pictures elem_pic  driver.find_element_by_xpath(//div[classimgpage]/ul/li/div/a/img)   elem_url  elem_pic.get_attribute(src)   printelem_url  #鼠标移动至图片上右键保存图片 get(elem_url)   printpage_source   elem  driver.find_element_by_xpath(//img)   action  ActionChains(driver).move_to_element(elem)   context_click(elem) #右键#当右键鼠标点击键盘光标向下则移动至右键菜单第一个选项 send_keys(Keys.ARROW_DOWN)   send_keys(v) #另存为 perform()   printDownload Pictures!!! 运行效果如下图所示。虽然它能实现右键另存为但是需要手动点击保存其原因是selenium无法操作操作系统级的对话框又说set profile代码段的设置能解决问题的并不靠谱。通过钩子Hook函数可以实现以前做过C#的钩子自动点击功能但是想到下载图片需要弹出并点击无数次对话框就很蛋疼所以该方法并不好         钩子函数java版本结合robot可以阅读下面这篇文章         selenium webdriver 右键另存为下载文件结合robot and autoIt 第三个方法 通过Selenium自动点击百度的下载按钮         其实现过程就是通过Selenium找到下载按钮再点击或获取链接即可。         该方法参考文章seleniumpython 爬取网络图片(2) -- 百度         同时这里需要强调百度动态加载可以通过Selenium模拟滚动窗口实现也参考上面文章。其中核心代码为 driver.maximize_window()pos  i*500   # 每次下滚500js  document.documentElement.scrollTop%d % posdriver.execute_script(js) 第四个方法 百度图片解码下载及线程实现        参考文章Python 3 多线程下载百度图片搜索结果
http://wiki.neutronadmin.com/news/231149/

相关文章:

  • 网站运营师怎样在网站上做免费的网业
  • 网站建设 佛山市微信开放平台是公众号吗
  • 网站开发 简单福田欧曼配件大全
  • 大学生课程设计网站网站有收录没权重
  • 一级a做爰片手机电影网站官网网站备案流程
  • 网站建设利益分析网站建设技术团队
  • 自建网站外贸怎么做m 外贸网站
  • 运行网站需要多少钱wordpress get_query_var
  • 西安高新区网站建设网站开发 方案概要
  • 如何自己做网站安康市移动公司电话
  • 做网站须知企业logo设计创意
  • c 用mysql做的网站2022年国内重大新闻事件
  • 广州手机网站建设公司哪家好化妆品网站建设方案
  • wordpress做流量站网站建设需要什么证件
  • 山西建设执业注册中心网站一亩地开发多少钱
  • 辽宁省城乡建设厅网站网站建设需要什么研究条件
  • 猎头公司网站素材argo wordpress
  • 做网站用什么程序深圳最好的网站制作哪家公司好
  • 青岛济南网站制作做网页专题 应该关注哪些网站
  • 静态网站做301重定向做我的奴隶腾讯网站
  • 美空间网站一个人做网站赚钱
  • 网站备案收录下降成都网站建设报价表
  • 网站做子域名ucenter 整合两个数据库网站
  • 手机怎样做自己的网站传奇手游开服表网站
  • 门户网站建设管理工作方案seo网页优化公司
  • 适合美工的网站平面设计网站模板
  • 中国seo第一人老网站怎么优化
  • 公司网站策划书黄页88怎么发信息质量高
  • 类似于建设通的网站企业网站模板seo
  • 网站收录量下降网站制作流程的组成部分包括