实现了monodb和csv的文件写入

mongodb如下:

这里学历要求获取错了,取错列表下标了...,代码已经改正

Excel如下:

这里学历要求获取错了,取错列表下标了...,代码已经改正

待解决问题:

由于过多的请求页面有时弹出验证码,代码现在只能通过手动输入解决,我这里设置了等待时间人工输入了验证码可继续写入。 最简单的方法就是可以通过更换ip去实现跳过验证码,但是这代码没有实现这功能--待完善

小白:希望大家多提点意见

import csv
import re
from time import sleep
from random import uniform
import pymongo
from lxml import etree
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWaitclass BossSpider(object):def __init__(self):self.driver = webdriver.Chrome()self.base_domain = 'https://www.zhipin.com'self.client = pymongo.MongoClient('localhost', 27017)  # 连接数据库连接self.db = self.client.spider_demo  # 创建/连接数据库self.collection = self.db.spider_boss  # 创建/连接集合def parse_boss(self, url):self.driver.get(url)try:WebDriverWait(self.driver, timeout=10).until(EC.presence_of_element_located((By.XPATH, '//div[@class="page"]/a[last()]')))except TimeoutError:print('工作列表页提取失败,重新获取')self.start(url)next_page = self.driver.find_element(By.XPATH, '//div[@class="page"]/a[last()]')  # 提取下一页next_url = next_page.get_attribute('href')text = self.driver.page_source  # 页面提取self.parse_job_list(text)  # 解析页面工作url链接if not next_url.startswith('http'):  # 域名拼接next_url = self.base_domain + next_urlif 'javascript' in next_url:  # 是否最后一页self.driver.quit()  # 退出else:# sleep(uniform(2, 8))self.parse_boss(next_url)  # 继续递归执行def parse_job_list(self, text):html = etree.HTML(text)job_urls = html.xpath('//div[@class="info-primary"]/h3[@class="name"]/a/@href')for job_url in job_urls:url = job_urlif not job_url.startswith('http'):  # 域名拼接url = self.base_domain + job_urlself.parse_job(url)def parse_job(self, url):self.driver.execute_script(r'window.open("{}")'.format(url))self.driver.switch_to.window(self.driver.window_handles[1])try:WebDriverWait(self.driver, timeout=10,).until(EC.presence_of_element_located((By.XPATH, '//div[@class="name"]/h1')))text = self.driver.page_sourceself.fetch_data(text)  # 解析页面sleep(uniform(3, 8))  # 模拟浏览时间self.driver.close()  # 关闭新窗口self.driver.switch_to.window(self.driver.window_handles[0])  # 切换第一个页面except:sleep(uniform(30, 60))  # 等待输入验证码时间print('详情页提取失败... 重新提取')self.driver.close()  # 关闭新窗口self.driver.switch_to.window(self.driver.window_handles[0])  # 切换第一个页面self.parse_job_list(url)def fetch_data(self, text):html = etree.HTML(text)job_name = html.xpath('//div[@class="name"]/h1/text()')[0]  # 岗位名称salary = html.xpath('//div[@class="name"]/span/text()')[0]  # 薪资basic_data = html.xpath('//div[@class="info-primary"]/p[1]/text()')[:3]  # 基础数据city = basic_data[0].replace('城市:', '').strip()job_years = basic_data[1].replace('经验:', '').strip()edu = basic_data[2].replace('学历:', '').strip()release_time = html.xpath('//div[@class="job-author"]/span/text()')[0]  # 发布时间release_time = release_time.replace('发布于', '').strip()company_name = html.xpath('//div[@class="info-company"]/h3//text()')[0]  # 公司名称describe = html.xpath('//div[@class="job-sec"]/div[@class="text"]/text()')  # 职业描述des = ''.join(describe).strip()  # 转换字符串des = re.sub('[\s ]', '', des)  # 格式转换address = html.xpath('//div[@class="location-address"]/text()')[0]  # 地址print(job_name)print(salary)print(city, job_years, edu)print(release_time)print(company_name)print(des)print(address)print('='*50)data = {'job_name': job_name, 'salary': salary, 'city': city,'job_years': job_years, 'edu': edu,'release_time': release_time, 'company_name': company_name,'des': des, 'address': address, 'url': self.driver.current_url}self.save_data_csv(data)self.save_mongodb(data)def save_title_csv(self):data_title = ['岗位名称', '薪资', '城市', '工作年限','教育', '发布时间', '公司名称', '岗位信息','地址', '网页地址']with open('boss.csv', 'a', encoding='utf-8-sig', newline='') as f:writer = csv.DictWriter(f, data_title)writer.writeheader()def save_data_csv(self, data):with open('boss.csv', 'a', encoding='utf-8-sig', newline='') as f:writer = csv.writer(f)writer.writerow([i for i in data.values()])print('='*20+'csv写入成功'+'='*20)def save_mongodb(self, data):self.collection.insert(data)print('='*20+'mongodb写入成功'+'='*20+'\n')def start(self, url):self.save_title_csv()self.parse_boss(url)print()if __name__ == '__main__':spider = BossSpider()url = 'https://www.zhipin.com/job_detail/?query=python&scity=100010000&industry=&position='spider.start(url)

实战-selenium实现BOSS直聘网信息爬取相关推荐

  1. Boss直聘职位信息爬取+分析

    BOSS直聘职位信息爬取分析 先上结果,本次抓取了732条职位的信息入库: 代码实现: import requests import json from lxml import etree from ...

  2. Python3 + xpath + excel 实现对boss直聘网的爬取

    一.项目简介 1.内容:抓取boss直聘网上广州地区的 python 相关工作的招聘信息,并且将招聘信息循环保存在excel表中 2.目标网站:https://www.zhipin.com/c1012 ...

  3. Boss直聘招聘信息爬取

    利用selenium进行爬取,数据为CSV文件 编写时间:2020年03月16日(若爬取失败,应该是网站更新造成的.) from selenium import webdriver from sele ...

  4. 02-01 boss直聘招聘信息爬取(xpath解析)

    1. 目标内容: ①公司名称 ②岗位名称 ③薪资 ④岗位描述 2.分析 ①该网页不是动态加载的 ②岗位介绍在岗位详情页面中 3. 代码 import requests from lxml import ...

  5. 用BeautifulSoup简单爬取BOSS直聘网岗位

    用BeautifulSoup简单爬取BOSS直聘网岗位 爬取python招聘 import requests from bs4 import BeautifulSoupdef fun(path):r1 ...

  6. Python的boss直聘职位信息数据分析系统

    本项目主要利用python技术爬取BOSS直聘网站上的岗位信息,进行对比分析UI设计师与产品经理两个职位的趋势.爬取字段:工作地点,薪资范围,学历要求,工作经验,公司性质等. 模拟登陆BOSS直聘网站 ...

  7. python爬取boss直聘招聘信息_Python爬虫实战-抓取boss直聘招聘信息

    Python Python开发 Python语言 Python爬虫实战-抓取boss直聘招聘信息 实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Pyth ...

  8. python爬虫教程:Scrapy框架爬取Boss直聘网Python职位信息的源码

    今天小编就为大家分享一篇关于Scrapy框架爬取Boss直聘网Python职位信息的源码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 分析 使用Crawl ...

  9. Boss直聘网爬虫 基于requests 请求的源码

    import requests from bs4 import BeautifulSoup import re import time import random# from zhi_lian_zha ...

最新文章

  1. Docker 1.3.2发布:修复重大安全问题
  2. Xcode 代码块添加
  3. CentOS服务器利用.htaccess批量封IP方法介绍
  4. Java设计模式(十五):桥接设计模式
  5. Buffer table CRMD_DHR_HSRVORD
  6. Spring 事务原理和使用
  7. 为DEV C++/CodeBlock配置gdb调试遇到的问题
  8. 终于有人把Elasticsearch原理讲明白了!
  9. Mysql学习总结(27)——Mysql数据库字符串函数
  10. python递归查找值返回_python – 从树递归中返回值列表
  11. 刚刚,谷歌宣布TPU全面开放,AI芯片及云市场再迎变局
  12. Scribe+HDFS日志收集系统安装方法
  13. Adobe全系列软件介绍
  14. android 怎样扩大内存卡,SD卡变RAM 增加虚拟内存方法
  15. python乒乓球比赛规则介绍_乒乓球比赛的简要规则
  16. 《每日一题》——146. LRU 缓存|460. LFU 缓存
  17. CSR867x — 如何添加自定义AT Command
  18. 王迪手机软件测试,王迪的作品集 - 新片场
  19. 国产手机设计业遭遇拐点 萧条期寻觅突围路
  20. CCPC 2050 万人编程竞赛热身赛:1001 赶火车

热门文章

  1. 银行卡认证接口,银行卡实名核验接口
  2. Pyhon在振动信号处理中的高级应用(十一):监督式特征的选择方法(F_Score、Chi-square Score、mRMR)
  3. idea提示未配置 Spring Boot 配置注解处理器解决方法
  4. ∫(0→1) ln(1+x) / (x² + 1) dx
  5. 计算机故障的现象有哪些,电喷发动机常见故障现象有哪些
  6. 2018考研计算机408经验详谈
  7. python重要库的导入和使用_python重要第三方库pandas加载数据(详解)
  8. 佛说.今生娶你的人,就是前世埋葬你的人
  9. 【历史上的今天】1 月 7 日:Mosaic 正式停止开发;Sketchpad 问世;PDA 被命名
  10. 网络系统集成课程设计