微信号:gh_1b396ada9905

介绍:本公众号专注于Python;一周一篇干货文章,让你轻松学python;我们一起共勉!

51job爬虫代码,用python操作火狐爬虫!

2016-05-23 18:41 Python的一言堂

因为最近太忙,更新有些慢,请大家见谅!应某位网友的请求,我就讲此爬虫代码完整的分享出来,本人刚入门,大神勿喷,谢谢!!

另外因为纯代码超出字数要求,用两篇文章发了!!

 # _*_ coding:utf-8 _*_
from selenium import webdriver         #导入selenium包    用于我们爬取信息
from selenium.webdriver.common.keys import Keys  #需要引入keys包
import os,time                                  #导入os和time包
import csv                                 #导入csv包   用于将数据导入到csv文件
import random                             #导入random包 用于使用随机函数
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities data =[]                                 #定义data为一个空列表# 生成一个有多个User_Agent表头的列表
my_headers = [    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Woningstichting Den Helder; .NET CLR 1.0.3705)'
,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)'
,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.41115)'
,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; MyIE2; .NET CLR 1.1.4322)'
,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; MyIE2; Maxthon; .NET CLR 1.1.4322)'
] #下面定义一个函数,用于从主页面获取招聘信息详情页的链接

def get_link(url,position):    random_header = random.choice(my_headers)  #用于随机选择上面的表头    print random_header# dcap = dict(DesiredCapabilities.PHANTOMJS)# dcap["phantomjs.page.settings.userAgent"] = (random_header)    profile=webdriver.FirefoxProfile()    #选择火狐浏览器来爬取网页信息    profile.set_preference("general.useragent.override",random_header)  #设定表头    driver=webdriver.Firefox(profile)       #启动火狐浏览器
   # driver = webdriver.PhantomJS()    time.sleep(3)                     #等待三秒    driver.maximize_window() # 浏览器全屏显示    driver.get(url)               #获取链接为url的页面    time.sleep(3)                 #等待三秒    driver.find_element_by_xpath("//a[@id='dw_close']").click()    #找到获取页面的属性为id=dw_close的a节点,并点击这个节点#     driver.get(url)    # driver.get('http://search.51job.com/list/000000%252C00,000000,0000,00,9,99,%25CA%25FD%25BE%25DD%25B7%25D6%25CE%25F6%25CA%25A6,0,1.html?lang=c&stype=2&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=01&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&list_type=0&confirmdate=9&fromType=22&dibiaoid=0')    time.sleep(3)                            #等待三秒    # driver.maximize_window() # 浏览器全屏显示    driver.find_element_by_id("kwdselectid").clear()    time.sleep(3)    driver.find_element_by_id("kwdselectid").send_keys(position)    # print driver.page_source    links = driver.find_elements_by_class_name("t1")      #通过找到class=t1的节点    url_box = []                                    #定义一个空的链接列表    a = 0                                          #定义a=0    for link_item in links[1:]:                 #遍历links节点的除第一个外的所有元素        a += 1                                  #a循环加1        link = link_item.find_element_by_tag_name("a").get_attribute("href")           #找到节点名为a的href属性即为详情页面链接# links = driver.find_elements_by_xpath("//div[contains(@class,'el')]/p[contains(@class,'t1')]/a/@href")# driver.find_element_by_xpath()        print a,link        url_box.append(link)                   #将获取到的链接加入到链接列表中    driver.close()                             #关闭浏览器    driver.quit()    
   return url_box                            #最后返回链接列表

b = 0                                         #定义b的初始值为0#构造一个获取详情页面具体信息的函数

def get_info(url):    global b                #设定b为全局变量    b += 1                  #循环加1    driver.get(url)    
   print b,url    # id = url    try:        jobname=driver.find_element_by_xpath("//div[@class='cn']/h1").text        company=driver.find_element_by_xpath("//div[@class='cn']/p[@class='cname']").text        place = driver.find_element_by_class_name('lname').text        #找到class属性名为lname的节点并获取内部文本        salary = driver.find_element_by_xpath("//div[@class='cn']/strong").text       #道理同时,下同        industry = driver.find_element_by_xpath("//p[@class='msg ltype']").text        request = driver.find_element_by_xpath("//div[@class='bmsg job_msg inbox']").text        qita=driver.find_element_by_xpath("//div[@class='t1']").text        
       print position,url,jobname,company,place,salary,industry,qita,request        #以下为将我们获取的信息写入到csv文件中        csvfile = file(r'D:\python2.7\51jobs13.csv', "w")        # #打开并写入此路径下的csv文件        writer = csv.writer(csvfile,lineterminator='\n')  #定义写入的文件类型及模式        # writer.writerow(['keyword','url','jobname','company','salary','place','industry','qita','request'])        data.append((position.encode('utf-8'),url.encode('utf-8'),jobname.encode('utf-8'),company.encode('utf-8'),salary.encode('utf-8'),place.encode('utf-8'),industry.encode('utf-8'),qita.encode('utf-8'),request.encode('utf-8')))        #向data中添加我们所获取的信息        writer.writerows(data)  #逐行写入data数据        #        csvfile.close()     #关闭文件        # list1 = [jobname.encode('utf-8'),company.encode('utf-8'),salary.encode('utf-8'),place.encode('utf-8'),industry.encode('utf-8'),qita.encode('utf-8'),request.encode('utf-8')]        # f = open(r'D:\python2.7\51jobs13.txt','a')        # print list1        # k=' '.join([str(j) for j in list1])        # f.write(k+"\n")        # f.close()    except:        
       pass    # driver.close()    # driver.quit()# def main(url,position):    #现在我们要循环翻页

for n in range(1,10):    url = 'http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea=000000%2C00&district=000000&funtype=0000&industrytype=00&issuedate=9&providesalary=99&keyword=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88&keywordtype=0&curr_page='+str(n)+'&lang=c&stype=2&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=01&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&list_type=0&fromType=14&dibiaoid=0&confirmdate=9'    position = u'数据分析师'    random_header = random.choice(my_headers)     #随机选择表头    print random_header    # dcap = dict(DesiredCapabilities.PHANTOMJS)    # dcap["phantomjs.page.settings.userAgent"] = (random_header)    profile=webdriver.FirefoxProfile()    profile.set_preference("general.useragent.override",random_header)    driver=webdriver.Firefox(profile)    
   try:        links = get_link(url,position)    #调用get_link()函数    except:        
   pass    for i in range(0,len(links)):        get_info(links[i])                #调用get_info()函数        if i ==len(links)-1:             driver.close()             driver.quit()# print driver.page_source


 
Python的一言堂 更多文章 利用python进行数据分析案例一(一见钟情对python) Python基础教程1:Python简介 Python基础教程2:Python的环境搭建 Python基础教程3:基础语法 Python基础教程4:变量类型
猜您喜欢 美国资深心理专家:20多岁的你做什么才真正有意义? 【CDAS 2016】黄东旭:分布式数据库模式与反模式 符号与面具 北京的42环在哪里? 前沿 | 欲做“数据中国“推手?曙光手里的筹码有什么?