1、scrapy 配合 selenium、phantomJS 抓取动态页面, 单纯的selemium 加 Firefox浏览器就可以抓取动态页面了,

但开启窗口太耗资源,而且一般服务器的linux 没有视窗系统,所以通过无窗口的phantomJS就行了,原理都是通过webket加载js渲染。

直接 pip install selenium 安装 selenium,下载 phantomJS 解压,并将 phantomJS.exe 加入到系统环境,然后就大功告成了。

  1. #coding:utf-8
  2. import sys
  3. reload(sys)
  4. sys.setdefaultencoding( "utf-8" )
  5.  
  6. from selenium import webdriver
  7. from selenium.webdriver.common.keys import Keys
  8. from selenium.webdriver.common.action_chains import ActionChains
  9. from scrapy.selector import Selector
  10. import time
  11. import os
  12.  
  13. def writeFile(dirPath, page):
  14. data = Selector(text = page).xpath("//td[@class='zwmc']/div/a")
  15. titles = data.xpath('string(.)').extract()
  16. timeMarks = Selector(text = browser.page_source).xpath("//td[@class='gxsj']/span/text()").extract()
  17. links = Selector(text = browser.page_source).xpath("//td[@class='zwmc']/div/a/@href").extract()
  18.  
  19. for i in range(len(titles)):
  20. fileName = titles[i].replace(':', '-').replace('/', '-').replace('\\', '-').replace('*', 'x').replace('|', '-').replace('?', '-').replace('<', '-').replace('>', '-').replace('"', '-').replace('\n', '-').replace('\t', '-')
  21. filePath = dirPath + os.sep + fileName + '.txt'
  22.  
  23. with open(filePath, 'w') as fp:
  24. fp.write(titles[i])
  25. fp.write('$***$')
  26. fp.write(timeMarks[i])
  27. fp.write('$***$')
  28. fp.write(links[i])
  29.  
  30. def searchFunction(browser, url, keyWord, dirPath):
  31. browser.get(url)
  32.  
  33. #勾选城市
  34. browser.find_element_by_xpath("//input[@id='buttonSelCity']").click()
  35. browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[1]/td/label/input[@iname='北京']").click()
  36. browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[1]/td/label/input[@iname='上海']").click()
  37. browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[3]/td/label/input[@iname='南京']").click()
  38. browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[4]/td/label/input[@iname='苏州']").click()
  39. browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[4]/td/label/input[@iname='无锡']").click()
  40. browser.find_element_by_xpath("//div[@class='sPopupTitle250']/div/a[1]").click()
  41.  
  42. #定位搜索框
  43. searchBox = browser.find_element_by_xpath("//div[@class='keyword']/input[@type='text']")
  44.  
  45. #发送搜索内容
  46. searchBox.send_keys(keyWord)
  47.  
  48. #确认搜索
  49. browser.find_element_by_xpath("//div[@class='btn']/button[@class='doSearch']").click()
  50.  
  51. totalCount = Selector(text = browser.page_source).xpath("//span[@class='search_yx_tj']/em/text()").extract()[0]
  52. pageOver = int(totalCount) / 40
  53. for i in range(pageOver):
  54. time.sleep(3)
  55. writeFile(dirPath, browser.page_source)
  56. browser.find_element_by_link_text("下一页").click()
  57.  
  58. time.sleep(3)
  59. writeFile(dirPath, browser.page_source)
  60.  
  61. if __name__ == '__main__':
  62. print 'START'
  63. url = 'http://www.zhaopin.com/'
  64. keyWord = u"华为技术有限公司"
  65. dirPath = keyWord + u"招聘信息"
  66.  
  67. if not os.path.exists(dirPath):
  68. os.makedirs(dirPath)
  69.  
  70. #定义一个火狐浏览器对象
  71. # browser = webdriver.Firefox()
  72. browser = webdriver.PhantomJS()
  73. searchFunction(browser, url, keyWord, dirPath)
  74.  
  75. # browser.close()
  76. browser.quit()
  77. print 'END'

参考资料:

1、python+selenium+scrapy搭建简单爬虫 http://blog.csdn.net/treasure_z/article/details/51064493

2、数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 http://blog.chinaunix.net/uid-22414998-id-3692113.html

3、scrapy 和selenium如何连接起来 https://segmentfault.com/q/1010000002958344

scrapy 学习笔记的更多相关文章

  1. Scrapy:学习笔记(2)——Scrapy项目

    Scrapy:学习笔记(2)——Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为“demo” scrapy startproject demo cd demo 稍等片刻后,Scr ...

  2. Scrapy:学习笔记(1)——XPath

    Scrapy:学习笔记(1)——XPath 1.快速开始 XPath是一种可以快速在HTML文档中选择并抽取元素.属性和文本的方法. 在Chrome,打开开发者工具,可以使用$x工具函数来使用XPat ...

  3. scrapy 学习笔记1

    最近一段时间开始研究爬虫,后续陆续更新学习笔记 爬虫,说白了就是获取一个网页的html页面,然后从里面获取你想要的东西,复杂一点的还有: 反爬技术(人家网页不让你爬,爬虫对服务器负载很大) 爬虫框架( ...

  4. scrapy学习笔记(1)

    初探scrapy,发现很多入门教程对应的网址都失效或者改变布局了,走了很多弯路.于是自己摸索做一个笔记. 环境是win10 python3.6(anaconda). 安装 pip install sc ...

  5. Scrapy学习笔记(5)-CrawlSpider+sqlalchemy实战

    基础知识 class scrapy.spiders.CrawlSpider 这是抓取一般网页最常用的类,除了从Spider继承过来的属性外,其提供了一个新的属性rules,它提供了一种简单的机制,能够 ...

  6. scrapy 学习笔记2

    本章学习爬虫的 回调和跟踪链接 使用参数 回调和跟踪链接 上一篇的另一个爬虫,这次是为了抓取作者信息 # -*- coding: utf-8 -*- import scrapy class Myspi ...

  7. scrapy学习笔记一

    以前写爬虫都是直接手写获取response然后用正则匹配,被大佬鄙视之后现在决定开始学习scrapy 一.安装 pip install scrapy 二.创建项目 scrapy startprojec ...

  8. Scrapy 学习笔记(一)数据提取

    Scrapy 中常用的数据提取方式有三种:Css 选择器.XPath.正则表达式. Css 选择器 Web 中的 Css 选择器,本来是用于实现在特定 DOM 元素上应用花括号内的样式这样一个功能的. ...

  9. scrapy学习笔记

    1.scrapy用哪条命令行重新编辑已有的项目?cd projectname 2.如何在pycharm中开启scrapy?先在终端创建一个项目(即文件夹),再在pycharm中打开.

随机推荐

  1. (转)Dubbo与Zookeeper、SpringMVC整合和使用

    原文地址: https://my.oschina.net/zhengweishan/blog/693163 Dubbo与Zookeeper.SpringMVC整合和使用 osc码云托管地址:http: ...

  2. Leetcode: Convert sorted list to binary search tree (No. 109)

    Sept. 22, 2015 学一道算法题, 经常回顾一下. 第二次重温, 决定增加一些图片, 帮助自己记忆. 在网上找他人的资料, 不如自己动手. 把从底向上树的算法搞通俗一些. 先做一个例子: 9 ...

  3. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  4. WWW读取安卓外部音乐文件

    需求分析 使用Everyplay(2121-1540版本)录屏,在升级SDK之后,遇到个问题,调用安卓原生的mediaplay进行播放音乐,在录屏时无法录制到声音,所以想到的解决办法是在Unity中播 ...

  5. ActiveMQ笔记(1):编译、安装、示例代码

    一.编译 虽然ActiveMQ提供了发布版本,但是建议同学们自己下载源代码编译,以后万一有坑,还可以尝试自己改改源码. 1.1 https://github.com/apache/activemq/r ...

  6. [LeetCode] Encode and Decode Strings 加码解码字符串

    Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...

  7. 【原】Spark之机器学习(Python版)(一)——聚类

      kmeans聚类相信大家都已经很熟悉了.在Python里我们用kmeans通常调用Sklearn包(当然自己写也很简单).那么在Spark里能不能也直接使用sklean包呢?目前来说直接使用有点困 ...

  8. 琴弦文字 - wpf行为

    效果图: 此效果的设计和实现思路均来自:上位者的怜悯 详情见原文:http://www.cnblogs.com/lianmin/p/5940637.html 我所做的,只是将原作者的设计和思路封装成了 ...

  9. 在Eclipse中使用建立使用Gradle做依赖管理的Spring Boot工程

    前述: Gradle存在很长时间了,以前只知道Maven和ivy ,最近才知道有这个存在,因为以后要用这个了; 所以,要先学会怎么用这个工具,就从建立一个简单工程开始! 实际上以前是见过Gradle的 ...

  10. C/C++ 标准输入输出重定向

    转载自:http://www.cnblogs.com/hjslovewcl/archive/2011/01/10/2314356.html 这个对经常在OJ上做题的童鞋们很有用.OJ基本都是用标准输入 ...