python+selenium+scrapy搭建简单爬虫

接触爬虫也有一段时间了,下面我就来简单介绍一种我认为较为直观有效的方式。基本搭配:python2.7+selenium+scrapy,selenium用来模拟真实用户操作浏览器的过程,scrapy用来提取网页内容。

关于安装方式我就暂且提一下我接触过的两种:

1.安装python2.7,使用pip install+包名的形式安装selenium和scrapy。一般这种情况下装scrapy都比较痛苦。如果直接使用命令行无法安装成功,那么可以去官网上下载对应的包直接运行。

2.安装Anaconda,使用pip install+包名或者conda install+包名的形式安装selenium和scrapy。

爬取的过程概括一下就是首先定义一个浏览器对象,然后使用这个对象实现诸如鼠标点击,键盘发送等一系列的操作。对于想要提取内容的页面,就使用scrapy中的Selector构造xpath去解析网页源码。

这么讲可能太抽象,所以我把一个比较简单的爬取指定企业招聘信息的程序贴出来具体讲解。实现基本操作的代码上方均有注释。


#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )


from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from scrapy.selector import Selector
import time
import os


def writeFile(dirPath, page):
    data = Selector(text = page).xpath("//td[@class='zwmc']/div/a")
    titles = data.xpath('string(.)').extract()
    timeMarks = Selector(text = browser.page_source).xpath("//td[@class='gxsj']/span/text()").extract()
    links = Selector(text = browser.page_source).xpath("//td[@class='zwmc']/div/a/@href").extract()


    for i in range(len(titles)):
        fileName = titles[i].replace(':', '-').replace('/', '-').replace('\\', '-').replace('*', 'x').replace('|', '-').replace('?', '-').replace('<', '-').replace('>', '-').replace('"', '-').replace('\n', '-').replace('\t', '-')
        filePath = dirPath + os.sep + fileName + '.txt'


        with open(filePath, 'w') as fp:
            fp.write(titles[i])
            fp.write('$***$')
            fp.write(timeMarks[i])
            fp.write('$***$')
            fp.write(links[i])




def searchFunction(browser, url, keyWord, dirPath):
    browser.get(url)


#勾选城市
    browser.find_element_by_xpath("//input[@id='buttonSelCity']").click()
    browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[1]/td/label/input[@iname='北京']").click()
    browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[1]/td/label/input[@iname='上海']").click()
    browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[3]/td/label/input[@iname='南京']").click()
    browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[4]/td/label/input[@iname='苏州']").click()
    browser.find_element_by_xpath("//table[@class='sPopupTabC']/tbody/tr[4]/td/label/input[@iname='无锡']").click()
    browser.find_element_by_xpath("//div[@class='sPopupTitle250']/div/a[1]").click()


#定位搜索框
    searchBox = browser.find_element_by_xpath("//div[@class='keyword']/input[@type='text']")


#发送搜索内容 
    searchBox.send_keys(keyWord)


#确认搜索   
    browser.find_element_by_xpath("//div[@class='btn']/button[@class='doSearch']").click()


    totalCount = Selector(text = browser.page_source).xpath("//span[@class='search_yx_tj']/em/text()").extract()[0]
    pageOver = int(totalCount) / 40
    for i in range(pageOver):
        time.sleep(3)
        writeFile(dirPath, browser.page_source)
        browser.find_element_by_link_text("下一页").click()    


    time.sleep(3)
    writeFile(dirPath, browser.page_source) 




if __name__ == '__main__':
    print 'START'
    url = 'http://www.zhaopin.com/'
    keyWord = u"华为技术有限公司"
    dirPath = keyWord + u"招聘信息"


    if not os.path.exists(dirPath):
        os.makedirs(dirPath)


#定义一个火狐浏览器对象
    browser = webdriver.Firefox()
    searchFunction(browser, url, keyWord, dirPath)


    browser.close()
    print 'END'




转自:http://www.360doc.com/content/16/0708/17/1317564_574071179.shtml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值