赞
踩
正在通过boss直聘求职,然后见网上有需求boss直聘的职位大数据的,就简单写了一下,发现boss直聘的反爬机制还是比较友好的,首先不需要登陆就可以获取所有的职位信息,其次如果想要避过boss反爬成功访问,使用selenium完全可以直接访问,也就意味着如果使用requests的话,只要仿造一下请求头就可以完成,其中需要注意一下的是,boss直聘对爬虫此类的辨别主要体现在看访问的速率,笔者在完成爬虫时,大概一个ip可以访问3到4页,如果访问速度慢一点的话,也许可以更多,所以最好是可以构造一下ip池,几个ip协同访问就可以完成爬虫,再次把代码放一下吧,和原先一样核心代码我隐藏了,需要的话call我。
上一篇呢写过一个爬取淘宝的代码,有想看的也可以看一下。
from selenium import webdriver from selenium.common.exceptions import NoSuchElementException import time import requests import csv chromeOptions = webdriver.ChromeOptions() # 设置代理 chromeOptions.add_argument("--proxy-server=http://117.93.19.224:4232 ") driver = webdriver.Chrome(chrome_options = chromeOptions) driver.get('https://www.zhipin.com/?sid=sem_pz_sgpc_title') #选址部分 cxxx='java' driver.find_element_by_xpath("//*[@id='wrap']/div[4]/div/div/div[1]/form/div[2]/p/input").clear() #清空搜索 driver.find_element_by_xpath("//*[@id='wrap']/div[4]/div/div/div[1]/form/div[2]/p/input").send_keys(cxxx) #键入内容 driver.maximize_window() #放大 driver.find_element_by_xpath("//*[@id='wrap']/div[4]/div/div/div[1]/form/button").click() #点击查找 time.sleep(30) driver.find_element_by_xpath("//*[@class='btn-allcity']").click() #点击全部城市 time.sleep(2) driver.find_element_by_xpath("//li[text()='ABCDE']").click() #点击BCDEFG time.sleep(2) driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/div/ul[2]/li[2]/ul/li[1]/span").click() #北京 driver.find_element_by_xpath("//*[@id='filter-box']/div/div[1]/div/form/div[1]/p/input").clear() #清空搜索 driver.find_element_by_xpath("//*[@id='filter-box']/div/div[1]/div/form/div[1]/p/input").send_keys(cxxx) #键入内容 driver.find_element_by_xpath("//*[@id='filter-box']/div/div[1]/div/form/button").click() #点击查找 #选址部分结束 time.sleep(3) #接下来进入遍历状态 a=driver.find_elements_by_xpath("//span[@class='job-name']") #a是遍历的总体内容 suma = len(a) #限制遍历次数 i=0 fy=open('text.txt')#刚开始打开时的翻页控制 ym=fy.read() ym=int(ym) fy.close() #翻页控制 while(i<=suma): time.sleep(3) all_handle = driver.window_handles driver.switch_to_window(all_handle[-1]) #切换完成 a=driver.find_elements_by_xpath("//span[@class='job-name']") #a是遍历的总体内容 if(i==suma): js="var q=document.documentElement.scrollTop=100000" #翻到页尾 driver.execute_script(js) #翻到页尾 driver.find_element_by_xpath("//a[@ka='page-next']").click() #a是遍历的总体内容 //*[@id="main"]/div/div[2]/div[2]/a[6] i=0 continue a[i].click() i=i+1 all_handle = driver.window_handles driver.switch_to_window(all_handle[-1]) #切换到子网页页柄 #对于其中的内容进行提取 try: print("隐藏") except: print("出错了!") driver.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。