有的页面会使用frame 框架,使用Selenium + PhantomJS 后并不会加载iframe 框架中的网页内容。iframe 框架相当于在页面中又加载了一个页面,需要使用Selenium 的 switch_to.frame() 方法加载

(官网给的方法是switch_to_frame(),但是IDE提醒使用前面的方法替代该方法)。

比如:

driver.switch_to.frame('g_iframe')

  一、介绍

    本例子用Selenium +phantomjs爬取流媒体(http://www.lmtw.com/search.php?show=title%2Ckeyboard%2Cwriter&searchget=1&keyboard=%E7%94%B5%E8%A7%86)的资讯信息,输入给定关键字抓取资讯信息。

    给定关键字:数字;融合;电视

    抓取信息内如下:

      1、资讯标题

      2、资讯链接

      3、资讯时间

      4、资讯来源

 

  二、网站信息

    

    

    

  三、数据抓取

    针对上面的网站信息,来进行抓取

    1、首先抓取信息列表

      抓取代码:Elements = doc('h2[class="r"]')

    2、抓取标题

      抓取代码:title = element.find('a').text().encode('utf8').strip()

    3、抓取链接

      抓取代码:url = element.find('a').attr('href')

    4、抓取日期

      抓取代码:dateElements = doc('span[class="a"]')

    5、抓取来源

      抓取代码:strSources = dochtml('div[class="from"]').text().encode('utf8').strip()

  

  四、完整代码

#coding=utf-8
importosimportrefrom selenium importwebdriverimportselenium.webdriver.support.ui as uiimporttimeimportdatetimefrom pyquery importPyQuery as pqimportLogFileimportmongoDBimporturllibclasslmtwSpider(object):def __init__(self,driver,log,keyword_list,websearch_url,valid,filter):''':param driver: 驱动:param log: 日志:param keyword_list: 关键字列表:param websearch_url: 搜索网址:param valid:  采集参数 0:采集当天;1:采集昨天:param filter: 过滤项,下面这些内容如果出现在资讯标题中,那么这些内容不要,过滤掉'''self.log=logself.driver=driverself.webSearchUrl_list= websearch_url.split(';')self.keyword_list=keyword_listself.db=mongoDB.mongoDbBase()self.valid=validself.start_urls=[]#过滤项self.filter =filterfor keyword inkeyword_list:url= websearch_url +urllib.quote(keyword)self.start_urls.append(url)defComapre_to_days(self,leftdate, rightdate):'''比较连个字符串日期,左边日期大于右边日期多少天:param leftdate: 格式:2017-04-15:param rightdate: 格式:2017-04-15:return: 天数'''l_time= time.mktime(time.strptime(leftdate, '%Y-%m-%d'))r_time= time.mktime(time.strptime(rightdate, '%Y-%m-%d'))result= int(l_time - r_time) / 86400returnresultdefdate_isValid(self, strDateText):'''判断日期时间字符串是否合法:如果给定时间大于当前时间是合法,或者说当前时间给定的范围内:param strDateText: '2017-06-20 10:22 ':return: True:合法;False:不合法'''currentDate= time.strftime('%Y-%m-%d')datePattern= re.compile(r'\d{4}-\d{2}-\d{2}')strDate=re.findall(datePattern, strDateText)if len(strDate) == 1:if self.valid == 0 and self.Comapre_to_days(currentDate, strDate[0])==0:returnTrue, currentDateelif self.valid == 1 and self.Comapre_to_days(currentDate, strDate[0])==1:return True,str(datetime.datetime.now() - datetime.timedelta(days=1))[0:10]elif self.valid == 2 and self.Comapre_to_days(currentDate, strDate[0]) == 2:return True,str(datetime.datetime.now() - datetime.timedelta(days=2))[0:10]return False, ''deflog_print(self, msg):'''#         日志函数#         :param msg: 日志信息#         :return:#'''print '%s: %s' % (time.strftime('%Y-%m-%d %H-%M-%S'), msg)defscrapy_date(self):try:strsplit= '------------------------------------------------------------------------------------'#isbreak = FalsekeywordIndex =0for link inself.start_urls:self.driver.get(link)self.driver.switch_to.frame('iframepage')keyword=self.keyword_list[keywordIndex]keywordIndex+= 1selenium_html= self.driver.execute_script("return document.documentElement.outerHTML")doc=pq(selenium_html)infoList=[]self.log.WriteLog(strsplit)self.log_print(strsplit)Elements= doc('h2[class="r"]')dateElements= doc('span[class="a"]')index=0for element inElements.items():date=dateElements[index].textindex+= 1flag,strDate=self.date_isValid(date)ifflag:title= element.find('a').text().encode('utf8').strip()#考虑过滤项if title.find(self.filter)>-1:continueif title.find(keyword) > -1:url= element.find('a').attr('href')dictM= {'title': title, 'date': strDate,'url': url, 'keyword': keyword, 'introduction': title}infoList.append(dictM)if len(infoList) >0:for item ininfoList:item['sourceType']=1url= item['url']self.driver.get(url)#self.driver.switch_to.frame('iframepage')htext = self.driver.execute_script("return document.documentElement.outerHTML")dochtml=pq(htext)strSources= dochtml('div[class="from"]').text().encode('utf8').strip()txtsource= strSources[strSources.find('来源:') + 9:]item['source']=txtsource[0:txtsource.find('')]self.log.WriteLog('title:%s' % item['title'])self.log.WriteLog('url:%s' % item['url'])self.log.WriteLog('date:%s' % item['date'])self.log.WriteLog('source:%s' % item['source'])self.log.WriteLog('kword:%s' % item['keyword'])self.log.WriteLog(strsplit)self.log_print('title:%s' % item['title'])self.log_print('url:%s' % item['url'])self.log_print('date:%s' % item['date'])self.log_print('source:%s' % item['source'])self.log_print('kword:%s' % item['keyword'])self.log_print(strsplit)self.db.SaveInformations(infoList)exceptException,e:self.log.WriteLog('lmtwSpider:'+e.message)finally:pass

Python-爬虫-针对有frame框架的页面相关推荐

  1. Python爬虫一般用什么框架比较好?

    Python爬虫一般用什么框架比较好?一般来讲,只有在遇到比较大型的需求时,才会使用Python爬虫框架.这样的做的主要目的,是为了方便管理以及扩展.本文将向大家推荐十个Python爬虫框架,它们分别 ...

  2. Python爬虫5.3 — scrapy框架spider[Request和Response]模块的使用

    Python爬虫5.3 - scrapy框架spider[Request和Response]模块的使用 综述 Request对象 scrapy.Request()函数讲解: Response对象 发送 ...

  3. pythonscrapy爬虫_零基础写python爬虫之使用Scrapy框架编写爬虫

    网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻 ...

  4. python爬虫之使用Scrapy框架编写爬虫

    转自:http://www.jb51.net/article/57183.htm 前面的文章我们介绍了Python爬虫框架Scrapy的安装与配置等基本资料,本文我们就来看看如何使用Scrapy框架方 ...

  5. Python爬虫知识点四--scrapy框架

    一.scrapy结构数据 解释: 1.名词解析: o 引擎(Scrapy Engine) o 调度器(Scheduler) o 下载器(Downloader) o 蜘蛛(Spiders) o ...

  6. python爬虫之十_scrapy框架进阶

    一 CrawlSpider:URL规则过滤 CrawSpider类可以定义过滤url的规则,当spCrawSpiderder碰到满足条件的url都自动进行爬取,不用像基本爬虫类spider需手动yie ...

  7. python爬虫正则表达式实例-使用正则表达式进行页面提取

    使用正则表达式进行页面提取 上节课我们学习了如何使用 BeautifulSoup 来解析页面,这节课我们来学习下如何使用正则来解析页面. 正则表达式的基本概念 正则表达式基本语法 正则表达式常用函数 ...

  8. python爬虫入门(六) Scrapy框架之原理介绍

    Scrapy框架 Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬 ...

  9. src获取同级目录中的图片_一个简单的Python爬虫实例:百度贴吧页面下载图片

    本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容: 分析html ...

最新文章

  1. git恢复到上次提交
  2. 把工程部署在tomcat的root路径下
  3. 数据中心(机房)施工方案
  4. WatchDog工作原理
  5. Mybatis的全局配置文件中的标签
  6. 四、PHP基础——会话技术Cookie 和 Session
  7. 2016中国国际大数据大会预热活动启航,首场沙龙聚焦精准营销
  8. java多线程测试性能,总线程使用总时间。
  9. 评分卡模型开发(五)--定性指标筛选
  10. 思科称可能是宇宙射线触发了路由器bug
  11. javascript获取TreeView控件选中节点的Text和Value
  12. QT的TreeWidget遍历文件夹并且显示(递归实现)
  13. 《Redis设计与实现》知识点目录
  14. 2021最新银行卡bin码
  15. 微信公众号html教程,公众号排版简易教程
  16. c语言:输入三角形的三边,判断是否是直角三角形
  17. 维夏英语暑期调研小分队——第二天
  18. matlab/simulink中自定义m-s函数作为simulink模块使用实例
  19. discuz默认显示用户昵称
  20. [11.02] 猴猴吃香蕉

热门文章

  1. 手势UIGestureRecognizer
  2. cvBoundingRect的用法(转)
  3. 2012 金华现场赛 A题
  4. 字体渲染 渲染引擎
  5. C++提高部分_C++类模板与函数模板的区别---C++语言工作笔记088
  6. C++_选择结构_switch语句_循环结构while_while案例猜数字_do while循环_dowhile案例水仙花数_---C++语言工作笔记017
  7. Vue使用vue-cli创建vue的模板项目---vue工作笔记0018
  8. axios取消请求_解决网站恶意频繁点击问题---axios工作笔记011
  9. 认证授权介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记109
  10. Linux工作笔记035---设置连接Linux Centos 超时连接时间_空闲的等待时间 -bash: TMOUT: readonly variable