[Python爬虫] 之十:Selenium +phantomjs抓取活动行中会议活动
一、介绍
本例子用Selenium +phantomjs爬取活动树(http://www.huodongshu.com/html/find_search.html?search_keyword=数字)的资讯信息,输入给定关键字抓取资讯信息。
给定关键字:数字;融合;电视
抓取信息内如下:
1、资讯标题
2、资讯链接
3、资讯时间
4、资讯来源
二、网站信息
三、数据抓取
针对上面的网站信息,来进行抓取
1、首先抓取信息列表
抓取代码:Elements = doc('div[id="eventList"]').find('div[class="list"]')
2、抓取标题
抓取代码:title = element('h3').find('a').text().encode('utf8').strip()
3、抓取链接
抓取代码:url = 'http://www.huodongshu.com' + element('h2').find('a').attr('href')
4、抓取日期
抓取代码:element('div[class="info time"]').text().encode('utf8').strip()
5、抓取主办方
抓取代码:orgnizer = element('div[class="info title"]').find('a').text().encode('utf8').strip()
6、抓取地点
抓取代码:area = element('div[class="info site"]').text().encode('utf8').strip()
四、完整代码
- # coding=utf-8
- import os
- import re
- from selenium import webdriver
- import selenium.webdriver.support.ui as ui
- import time
- from datetime import datetime
- from selenium.webdriver.common.action_chains import ActionChains
- import IniFile
- # from threading import Thread
- from pyquery import PyQuery as pq
- import LogFile
- import mongoDB
- import urllib
- class huodongshuSpider(object):
- def __init__(self):
- logfile = os.path.join(os.path.dirname(os.getcwd()), time.strftime('%Y-%m-%d') + '.txt')
- self.log = LogFile.LogFile(logfile)
- configfile = os.path.join(os.path.dirname(os.getcwd()), 'setting.conf')
- cf = IniFile.ConfigFile(configfile)
- self.keyword_list = cf.GetValue("section", "meeting_keywords").split(';')
- websearch_url = cf.GetValue("huodongshu", "websearchurl")
- self.db = mongoDB.mongoDbBase()
- self.start_urls = []
- for keyword in self.keyword_list:
- url = websearch_url + urllib.quote(keyword)
- self.start_urls.append(url)
- self.driver = webdriver.PhantomJS()
- self.wait = ui.WebDriverWait(self.driver, 2)
- self.driver.maximize_window()
- def scroll_foot(self):
- '''
- 滚动条拉到底部
- :return:
- '''
- js = ""
- # 如何利用chrome驱动或phantomjs抓取
- if self.driver.name == "chrome" or self.driver.name == 'phantomjs':
- js = "var q=document.body.scrollTop=10000"
- # 如何利用IE驱动抓取
- elif self.driver.name == 'internet explorer':
- js = "var q=document.documentElement.scrollTop=10000"
- return self.driver.execute_script(js)
- def compareDate(self, dateLeft, dateRight):
- '''
- 比较俩个日期的大小
- :param dateLeft: 日期 格式2017-03-04
- :param dateRight:日期 格式2017-03-04
- :return: 1:左大于右,0:相等,-1:左小于右
- '''
- dls = dateLeft.split('-')
- drs = dateRight.split('-')
- if len(dls) > len(drs):
- return 1
- if int(dls[0]) == int(drs[0]) and int(dls[1]) == int(drs[1]) and int(dls[2]) == int(drs[2]):
- return 0
- if int(dls[0]) > int(drs[0]):
- return 1
- elif int(dls[0]) == int(drs[0]) and int(dls[1]) > int(drs[1]):
- return 1
- elif int(dls[0]) == int(drs[0]) and int(dls[1]) == int(drs[1]) and int(dls[2]) > int(drs[2]):
- return 1
- return -1
- def date_isValid(self, strDateText):
- '''
- 判断日期时间字符串是否合法:如果给定时间大于当前时间是合法,或者说当前时间给定的范围内
- :param strDateText: 三种格式 '2017.04.27 ~ 04.28'; '2017.04.20 08:30 ~ 12:30' ; '2015.12.29 ~ 2016.01.03'
- :return: True:合法;False:不合法
- '''
- datePattern = re.compile(r'\d{4}-\d{2}-\d{2}')
- date = strDateText.replace('.', '-')
- strDate = re.findall(datePattern, date)
- currentDate = time.strftime('%Y-%m-%d')
- flag = False
- startdate = ''
- enddate = ''
- if len(strDate) == 2:
- # '2015.12.29 ~ 2016.01.03'
- if self.compareDate(strDate[1], currentDate) > 0:
- flag = True
- startdate = strDate[0]
- enddate = strDate[1]
- elif len(strDate) == 1:
- if date.find(':') > 0:
- # 2017.04.20 08:30 ~ 12:30
- if self.compareDate(strDate[0], currentDate) >= 0:
- flag = True
- startdate = strDate[0]
- enddate = strDate[0]
- else:
- # 2017.07.13 ~ 07.15
- startdate = strDate[0]
- enddate = date[0:5] + date[len(date) - 5:]
- if self.compareDate(enddate, currentDate) >= 0:
- flag = True
- return flag, startdate, enddate
- def log_print(self, msg):
- '''
- # 日志函数
- # :param msg: 日志信息
- # :return:
- # '''
- print '%s: %s' % (time.strftime('%Y-%m-%d %H-%M-%S'), msg)
- def scrapy_date(self):
- strsplit = '------------------------------------------------------------------------------------'
- for link in self.start_urls:
- # time.sleep(1)
- self.driver.get(link)
- selenium_html = self.driver.execute_script("return document.documentElement.outerHTML")
- doc = pq(selenium_html)
- infoList = []
- self.log.WriteLog(strsplit)
- self.log_print(strsplit)
- Elements = doc('div[id="eventList"]').find('div[class="list"]')
- for element in Elements.items():
- date = element('div[class="info time"]').text().encode('utf8').strip()
- flag, startdate, enddate = self.date_isValid(date)
- if flag:
- title = element('h2').find('a').text().encode('utf8').strip()
- for keyword in self.keyword_list:
- if title.find(keyword) > -1:
- url = 'http://www.huodongshu.com' + element('h2').find('a').attr('href')
- orgnizer = element('div[class="info title"]').find('a').text().encode('utf8').strip()
- area = element('div[class="info site"]').text().encode('utf8').strip()
- dictM = {'title': title, 'date': date,
- 'url': url, 'keyword': keyword,
- 'startdate': startdate, 'enddate': enddate,
- 'area': area, 'organizer': orgnizer}
- infoList.append(dictM)
- # self.log.WriteLog('title:%s'%title)
- # self.log.WriteLog('url:%s' % url)
- # self.log.WriteLog('orgnizer:%s' % orgnizer)
- # self.log.WriteLog('kword:%s' % keyword)
- # self.log.WriteLog('area:%s' % area)
- # self.log.WriteLog('-----------------------------------' )
- self.log_print('title:%s' % title)
- self.log_print('url:%s' % url)
- self.log_print('date:%s' % date)
- self.log_print('orgnizer:%s' % orgnizer)
- self.log_print('kword:%s' % keyword)
- self.log_print('area:%s' % area)
- self.log_print('--------------------------' )
- break
- if len(infoList)>0:
- self.db.SaveMeetings(infoList)
- self.driver.close()
- self.driver.quit()
- obj = huodongshuSpider()
- obj.scrapy_date()
[Python爬虫] 之十:Selenium +phantomjs抓取活动行中会议活动的更多相关文章
- [Python爬虫] 之八:Selenium +phantomjs抓取微博数据
基本思路:在登录状态下,打开首页,利用高级搜索框输入需要查询的条件,点击搜索链接进行搜索.如果数据有多页,每页数据是20条件,读取页数 然后循环页数,对每页数据进行抓取数据. 在实践过程中发现一个问题 ...
- [Python爬虫] 之九:Selenium +phantomjs抓取活动行中会议活动(单线程抓取)
思路是这样的,给一系列关键字:互联网电视:智能电视:数字:影音:家庭娱乐:节目:视听:版权:数据等.在活动行网站搜索页(http://www.huodongxing.com/search?city=% ...
- [Python爬虫] 之十一:Selenium +phantomjs抓取活动行中会议活动信息
一.介绍 本例子用Selenium +phantomjs爬取活动行(http://www.huodongxing.com/search?qs=数字&city=全国&pi=1)的资讯信息 ...
- [Python爬虫] 之十二:Selenium +phantomjs抓取中的url编码问题
最近在抓取活动树网站 (http://www.huodongshu.com/html/find.html) 上数据时发现,在用搜索框输入中文后,点击搜索,phantomjs抓取数据怎么也抓取不到,但是 ...
- C#使用Selenium+PhantomJS抓取数据
本文主要介绍了C#使用Selenium+PhantomJS抓取数据的方法步骤,具有很好的参考价值,下面跟着小编一起来看下吧 手头项目需要抓取一个用js渲染出来的网站中的数据.使用常用的httpclie ...
- python爬虫之分析Ajax请求抓取抓取今日头条街拍美图(七)
python爬虫之分析Ajax请求抓取抓取今日头条街拍美图 一.分析网站 1.进入浏览器,搜索今日头条,在搜索栏搜索街拍,然后选择图集这一栏. 2.按F12打开开发者工具,刷新网页,这时网页回弹到综合 ...
- selenium+PhantomJS 抓取淘宝搜索商品
最近项目有些需求,抓取淘宝的搜索商品,抓取的品类还多.直接用selenium+PhantomJS 抓取淘宝搜索商品,快速完成. #-*- coding:utf-8 -*-__author__ =''i ...
- python爬虫构建代理ip池抓取数据库的示例代码
爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...
- [Python爬虫] 之十三:Selenium +phantomjs抓取活动树会议活动数据
抓取活动树网站中会议活动数据(http://www.huodongshu.com/html/index.html) 具体的思路是[Python爬虫] 之十一中抓取活动行网站的类似,都是用多线程来抓取, ...
随机推荐
- [你必须知道的.NET]第二十六回:认识元数据和IL(下)
发布日期:2009.03.04 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 书接上回: 第二十四回:认识元数据和IL(上), ...
- 关于在C#对类的属性理解
在类中都有一些成员.什么是类中的成员呢,我个人理解的是一个类中所应有的属性,方法,字段(因为目前才接触到类.所以类中一些其它应有的东西还不太熟悉),现在只探讨我列举的这几个在类中应有的东西.什么是属性 ...
- 360杀毒导致的 VS 报扩展错误,请查看 ActiveLog.xml
360杀毒将 TypeScript的 tsserver.js 列为木马,结果导致VS2017启动时,总是报错,将其加为信任即可解决.
- 五十六 SMTP发送邮件
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...
- webstorm中.vue报错
1.webstorm中es6语法报错,解决方法: 打开 Settings => Languages & Frameworks => Javascript把 Javascript L ...
- 洛谷——P1113 杂务
P1113 杂务 题目描述 John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务 ...
- 北邮校赛 H. Black-white Tree (猜的)
H. Black-white Tree 2017- BUPT Collegiate Programming Contest - sync 时间限制 1000 ms 内存限制 65536 KB 题目描述 ...
- Linux命令之which
which [选项] [命令] 将命令的完整路径写入标准输出.具体是在环境变量PATH设置的目录里查找符合条件的文件,而环境变量PATH中保存了查找命令时需要遍历的目录. (1).选项 -v,-V,- ...
- 查看所有shell类型
[xf@xuexi ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/no ...
- 解决CDH的web界面使用nginx代理一些静态文件无法加载
vim /opt/cm-/share/cmf/webapp/WEB-INF/spring/mvc-config.xml .... 注释此行 <bean class="com.cloud ...