python + selenium 爬取Boss直聘

时间:2024-10-06 07:39:06
from selenium import webdriver import time import random import pandas as pd 启动谷歌浏览器 driver=webdriver.Chrome() 隐式等待(等待页面元素加载完毕) driver.implicitly_wait(10) 防止被识别, 设置随机等待秒数 rand_seconds = random.choice([1,3])+random.random() 循环10次 代表10for i in range(1,11): time.sleep(rand_seconds) driver.get(url='/c101010100/?query=python&page=%d'%i) driver.implicitly_wait(10) #隐式等待 爬取标题的时候遇到了一个小问题,爬出来的标题都是重复的。所以在这强制了爬取目标 for a in range(1,29): #用来存放全部数据 listall = [] #用来存标题的url listurl = [] dict = {} #爬取标题 listName=driver.find_elements_by_xpath('//*[@]/div/div/ul/li[%d]/div/div[1]/h3/a/div[1]'%a) #爬取标题的url urls = driver.find_elements_by_xpath('//*[@]/div/div/ul/li[%d]/div/div[1]/h3/a'%a) # 循环取出标题文本 和 超链接 for j in range(len(listName)): dict['name']=listName[j].text dict['url']=urls[j].get_attribute('href') # 进入每一个详情页 抓取内容 time.sleep(rand_seconds) driver.get(url=urls[j].get_attribute('href')) #new? content=driver.find_elements_by_xpath('//*[@]/div[3]/div/div[2]/div[2]/div[1]/div') # 遍历 取出内容文本 for c in range(len(content)): 关于sub的用法底部有链接 dict['content'] = re.sub('\n|\s|,,,,',',',''.join(content[c].text)) print(dict) listall.append(dict) # 在这也遇到了一个小问题,爬取职位描述成功后没有继续跳转 所以用到了() 返回函数 driver.back() # 将list类型转换为pandas二维数组 data = pd.DataFrame(listall) # 存csv data.to_csv('Boss直聘.csv', encoding='utf8', mode='a+',header=None,index=False) # 完成后关闭浏览器 driver.close()