[Python爬虫] 之三:Selenium 调用IEDriverServer 抓取数据

接着上一遍,在用Selenium+phantomjs 抓取数据过程中发现,有时候抓取不到,所以又测试了用Selenium+浏览器驱动的方式:具体代码如下:

#coding=utf-8import osimport refrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timefrom selenium.webdriver.common.action_chains import ActionChainsimport IniFileclass IEDriverCrawler:

    def __init__(self):        #通过配置文件获取IEDriverServer.exe路径        configfile = os.path.join(os.getcwd(),‘config.conf‘)        cf = IniFile.ConfigFile(configfile)        IEDriverServer = cf.GetValue("section", "IEDriverServer")        #每抓取一页数据延迟的时间,单位为秒,默认为5秒        self.pageDelay = 5        pageInteralDelay = cf.GetValue("section", "pageInteralDelay")        if pageInteralDelay:            self.pageDelay = int(pageInteralDelay)

        os.environ["webdriver.ie.driver"] = IEDriverServer        self.driver = webdriver.Ie(IEDriverServer)

    def CatchData(self,id,firstUrl,nextUrl,restUrl):        ‘‘‘        抓取数据        :param id: 要获取元素标签的ID        :param firstUrl: 首页Url        :param nextUrl: 下一页URL        :param restUrl: 下一页URL的组成部分        :return:        ‘‘‘        #加载首页        self.driver.get(firstUrl)        #打印标题        print self.driver.title        # id = "J_albumFlowCon"        element = self.driver.find_element_by_id(id)        txt = element.text.encode(‘utf8‘)        #打印获取的信息        print txt        print ‘ ‘        time.sleep(20)  # 延迟20秒,        #由于有多页数据,为了测试,只取出几页数据        for i in range(2, 4):            print ‘ ‘            time.sleep(20)  # 延迟20秒,            url = nextUrl + str(i) + restUrl            self.driver.get(url)            element = self.driver.find_element_by_id(id)            txt = element.text.encode(‘utf8‘)            print txt        self.driver.close()        self.driver.quit()

    def CatchDatabyClickNextButton(self,id,firstUrl):        ‘‘‘        抓取数据        :param id: 要获取元素标签的ID        :param firstUrl: 首页Url        :return:        ‘‘‘        start = time.clock()        #加载首页        self.driver.get(firstUrl)        #打印标题        print self.driver.title        # id = "J_ItemList"        firstPage = self.driver.find_element_by_id(id)        txt = firstPage.text.encode(‘utf8‘)        self.printTxt(1,txt)

        #获取总页数        name = ‘filterPageForm‘        totalPageElement = self.driver.find_element_by_name(name)        txt = totalPageElement.text.encode(‘utf8‘)#ui-page-next        pattern = re.compile(r‘\d+‘)        flist  = re.findall(pattern, txt)        pageCount = 1        if flist and len(flist)>0:            pageCount = int(flist[0])        if pageCount > 1:            pageCount = 10 #先爬三页            for index in range(2,pageCount + 1):                time.sleep(self.pageDelay) #延迟五秒                nextElement = self.driver.find_element_by_xpath("//a[@class=‘ui-page-next‘]")                nextUrl = nextElement.get_attribute(‘href‘)                self.driver.get(nextUrl)                # ActionChains(self.driver).click(element)                dataElement = self.driver.find_element_by_id(id)                txt = dataElement.text.encode(‘utf8‘)  # ui-page-next                print ‘ ‘                self.printTxt(index, txt)

        self.driver.close()        self.driver.quit()        end = time.clock()        print ‘ ‘        print "抓取每页数据后延迟 %d 秒" % self.pageDelay        print "总共抓取了 %d页数据" % pageCount        print "整个过程用时间: %f 秒" % (end - start)

    def printTxt(self,pageIndex,stringTxt):        ‘‘‘        打印抓取的每页数据        :param pageIndex:页数        :param stringTxt:每页抓取的数据        :return:        ‘‘‘        if stringTxt.find(‘¥‘) > -1:            itemList = stringTxt.split(‘¥‘)            print ‘第‘ + str(pageIndex) + ‘页数据‘            print ‘ ‘            for item in itemList:                if len(item) > 0:                    its = item.split(‘\n‘)                    if len(its)>=4:                        print ‘单价:        ¥%s‘ % its[0]                        print ‘品牌:        %s‘ % its[1]                        print ‘销售店铺名称: %s‘ % its[2]                        print ‘成交量:      %s‘ % its[3]                        print ‘ ‘

#测试抓取淘宝数据# obj = IEDriverCrawler()# firstUrl = "https://ai.taobao.com/search/index.htm?pid=mm_26632323_6762370_25910879&unid=&source_id=search&key=%E6%89%8B%E6%9C%BA&b=sousuo_ssk&clk1=&prepvid=200_11.251.246.148_396_1490081427029&spm=a231o.7712113%2Fa.a3342.1"# nextUrl=‘https://ai.taobao.com/search/index.htm?pid=mm_26632323_6762370_25910879&unid=&source_id=search&key=%E6%89%8B%E6%9C%BA&b=sousuo_ssk&clk1=&prepvid=200_11.251.246.157_19825_1490081412211&spm=a231o.7076277.1998559105.1&page=‘# # url=‘https://ai.taobao.com/search/index.htm?pid=mm_26632323_6762370_25910879&unid=&source_id=search&key=%E6%89%8B%E6%9C%BA&b=sousuo_ssk&clk1=&prepvid=200_11.251.246.148_396_1490081427029&spm=a231o.7712113%2Fa.a3342.1&page=2&pagesize=120‘# # url=‘https://ai.taobao.com/search/index.htm?pid=mm_26632323_6762370_25910879&unid=&source_id=search&key=%E6%89%8B%E6%9C%BA&b=sousuo_ssk&clk1=&prepvid=200_11.251.246.148_396_1490081427029&spm=a231o.7712113%2Fa.a3342.1&page=3&pagesize=120‘# restUrl = ‘&pagesize=120‘# obj.CatchData("J_albumFlowCon",firstUrl,nextUrl,restUrl)

#测试抓取天猫数据obj = IEDriverCrawler()firstUrl = "https://list.tmall.com/search_product.htm?q=%CA%D6%BB%FA&type=p&vmarket=&spm=875.7931836%2FB.a2227oh.d100&from=mallfp..pc_1_searchbutton"obj.CatchDatabyClickNextButton("J_ItemList",firstUrl)

本文章仅仅作为交流。
时间: 2024-10-06 09:54:45

[Python爬虫] 之三:Selenium 调用IEDriverServer 抓取数据的相关文章

python自然语言处理1——从网络抓取数据

python自然语言处理1--从网络抓取数据 写在前面 本节学习python2.7 BeautifulSoup库从网络抽取数据的技术,检验之简而言之就是爬虫技术.网络编程是一门复杂的技术,在需要基础的地方,文中给出的链接地址,都是很好的教程,可以参考,我在这里不在重复发明轮子.本节的主旨在于: 帮助快速掌握基本爬虫技术,形成一条主线,能为自己的实验构造基础数据.掌握爬虫技术后,可以从网络抓取符合特定需求的数据供分析,这里学习的爬虫技术适用于数据挖掘.自然语言处理等需要从外部挖掘数据的学科. 1.

Python爬虫成长之路:抓取证券之星的股票数据

获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据.程序主要分为三个部分:网页源码的获取.所需内容的提取.所得结果的整理. 一.网页源码的获取 很多人喜欢用python爬虫的原因之一就是它容易上手.只需以下几行代码既可抓取大部分网页的源码. import urllib.request url='http://quote.stockstar

python爬虫14--Selenium动态渲染页面抓取

1.声明浏览器对象 from selenium import webdriver browser = webdriver.Chrome() # browser = webdriver.Firefox() # browser = webdriver.Edge() 2.访问页面 from selenium import webdriver browser = webdriver.Chrome() url = 'http://www.baidu.com' browser.get(url) print(

python 爬虫2 介绍一下怎么抓取cookies,python多线程

读取cookies 可以这样: filename='FileCookieJar.txt' ckjar = cookielib.MozillaCookieJar() #这里读取cookie ckjar.load(filename, ignore_discard=True, ignore_expires=True) for item in ckjar: print "name:" +item.name print "Value:"+item.value 访问页面后,co

利用“爬虫”抓视频 法院审结全国首例计算机抓取数据案

近期,海淀法院审结了一起利用"爬虫"技术侵入计算机信息系统抓取数据的刑事案件.该案是全国首例利用"爬虫"技术非法入侵其他公司服务器抓取数据,进而实施复制被害单位视频资源的案件. 法院经审理查明,被告单位上海某网络科技有限公司,经营计算机网络科技领域内的技术开发.技术服务.电子商务.电子产品等业务.被告人张某是上海某网络科技有限公司法定代表人兼CEO,负责公司整体运行:被告人宋某于2016年8月至2017年2月任职上海某网络科技有限公司,担任联席CEO,是产品负责人:

分布式爬虫:使用Scrapy抓取数据

分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 官方主页: http://www.scrapy.org/ 中文文档:Scrapy 0.22 文档 GitHub项目主页:https://github.com/scrapy/scrapy Scrapy 使用了 Twisted 异步网络库来处理网络通讯.整体架构大致如下(注:图片来自

测试开发Python培训:抓取新浪微博抓取数据-技术篇

测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的selenium的课程中,我们在培训的课程里讲python的语言,也是通过项目实战的方式进行讲解,前期分享了个新浪微博的登陆功能,这次在通过抓取新浪微博数据进一步讲解脚本.(大家对课程感兴趣,请加qq:564202718) 微博有发布微博功能,微博发布后需要验证内容,那么如何验证微博发布数据的正确性,首先要

爬虫_快速构建实时抓取集群

定义: 首先,我们定义一下定向抓取,定向抓取是一种特定的抓取需求,目标站点是已知的,站点的页面是已知的.本文的介绍里面,主要是侧重于如何快速构建一个实时的抓取系统,并不包含通用意义上的比如链接分析,站点发现等等特性. 在本文提到的实例系统里面,主要用到linux+mysql+redis+django+scrapy+webkit,其中scrapy+webkit作为抓取端,redis作为链接库存储,mysql作为网页信息存储,django作为爬虫管理界面,快速实现分布式抓取系统的原型. 名词解析:

python爬虫实例详细介绍之爬取大众点评的数据

python 爬虫实例详细介绍之爬取大众点评的数据 一. Python作为一种语法简洁.面向对象的解释性语言,其便捷性.容易上手性受到众多程序员的青睐,基于python的包也越来越多,使得python能够帮助我们实现越来越多的功能.本文主要介绍如何利用python进行网站数据的抓取工作.我看到过利用c++和Java进行爬虫的代码,c++的代码很复杂,而且可读性.可理解性较低,不易上手,一般是那些高手用来写着玩加深对c++的理解的,这条路目前对我们不通.Java的可读性还可以,就是代码冗余比较多,