Python-爬虫-针对有frame框架的页面
有的页面会使用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框架的页面相关推荐
- Python爬虫一般用什么框架比较好?
Python爬虫一般用什么框架比较好?一般来讲,只有在遇到比较大型的需求时,才会使用Python爬虫框架.这样的做的主要目的,是为了方便管理以及扩展.本文将向大家推荐十个Python爬虫框架,它们分别 ...
- Python爬虫5.3 — scrapy框架spider[Request和Response]模块的使用
Python爬虫5.3 - scrapy框架spider[Request和Response]模块的使用 综述 Request对象 scrapy.Request()函数讲解: Response对象 发送 ...
- pythonscrapy爬虫_零基础写python爬虫之使用Scrapy框架编写爬虫
网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻 ...
- python爬虫之使用Scrapy框架编写爬虫
转自:http://www.jb51.net/article/57183.htm 前面的文章我们介绍了Python爬虫框架Scrapy的安装与配置等基本资料,本文我们就来看看如何使用Scrapy框架方 ...
- Python爬虫知识点四--scrapy框架
一.scrapy结构数据 解释: 1.名词解析: o 引擎(Scrapy Engine) o 调度器(Scheduler) o 下载器(Downloader) o 蜘蛛(Spiders) o ...
- python爬虫之十_scrapy框架进阶
一 CrawlSpider:URL规则过滤 CrawSpider类可以定义过滤url的规则,当spCrawSpiderder碰到满足条件的url都自动进行爬取,不用像基本爬虫类spider需手动yie ...
- python爬虫正则表达式实例-使用正则表达式进行页面提取
使用正则表达式进行页面提取 上节课我们学习了如何使用 BeautifulSoup 来解析页面,这节课我们来学习下如何使用正则来解析页面. 正则表达式的基本概念 正则表达式基本语法 正则表达式常用函数 ...
- python爬虫入门(六) Scrapy框架之原理介绍
Scrapy框架 Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬 ...
- src获取同级目录中的图片_一个简单的Python爬虫实例:百度贴吧页面下载图片
本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容: 分析html ...
最新文章
- git恢复到上次提交
- 把工程部署在tomcat的root路径下
- 数据中心(机房)施工方案
- WatchDog工作原理
- Mybatis的全局配置文件中的标签
- 四、PHP基础——会话技术Cookie 和 Session
- 2016中国国际大数据大会预热活动启航,首场沙龙聚焦精准营销
- java多线程测试性能,总线程使用总时间。
- 评分卡模型开发(五)--定性指标筛选
- 思科称可能是宇宙射线触发了路由器bug
- javascript获取TreeView控件选中节点的Text和Value
- QT的TreeWidget遍历文件夹并且显示(递归实现)
- 《Redis设计与实现》知识点目录
- 2021最新银行卡bin码
- 微信公众号html教程,公众号排版简易教程
- c语言:输入三角形的三边,判断是否是直角三角形
- 维夏英语暑期调研小分队——第二天
- matlab/simulink中自定义m-s函数作为simulink模块使用实例
- discuz默认显示用户昵称
- [11.02] 猴猴吃香蕉
热门文章
- 手势UIGestureRecognizer
- cvBoundingRect的用法(转)
- 2012 金华现场赛 A题
- 字体渲染 渲染引擎
- C++提高部分_C++类模板与函数模板的区别---C++语言工作笔记088
- C++_选择结构_switch语句_循环结构while_while案例猜数字_do while循环_dowhile案例水仙花数_---C++语言工作笔记017
- Vue使用vue-cli创建vue的模板项目---vue工作笔记0018
- axios取消请求_解决网站恶意频繁点击问题---axios工作笔记011
- 认证授权介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记109
- Linux工作笔记035---设置连接Linux Centos 超时连接时间_空闲的等待时间 -bash: TMOUT: readonly variable