爬取前尘无忧python职位信息并保存到mongo数据库
1.re实现
1 import re,os 2 import requests 3 from requests.exceptions import RequestException 4 5 MAX_PAGE = 10 #最大页数 6 KEYWORD = 'python' 7 headers = { 8 'User-Agent': 9 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 10 } 11 file_name = 're_job51_python.txt' 12 13 # 获取网页源码 14 def getHtml(page): 15 try: 16 url = 'https://search.51job.com/list/040000,000000,0000,00,9,99,{0},2,{1}.html?'.format(KEYWORD,page) 17 response = requests.get(url,headers=headers) 18 response.encoding = response.apparent_encoding 19 return response.text 20 except RequestException: 21 print('请求出错') 22 return None 23 24 # 解析网页源码,得到目标信息 25 def getTarget(html): 26 reg = re.compile( 27 r'class="t1 ">.*? <a target="_blank" ' 28 'title="(.*?)".*? <span class="t2"><a target="_blank" ' 29 'title="(.*?)".*?<span ' 30 'class="t3">(.*?)</span>.*?<span ' 31 'class="t4">(.*?)</span>.*? <span ' 32 'class="t5">(.*?)</span>', 33 re.S) # 匹配换行符 34 target = re.findall(reg,html) 35 return target 36 37 38 # 保存到文本中 39 def save_to_txt(item): 40 with open(file_name,'a',newline='') as f: # newline参数防止两行之间有空行 41 for i in range(len(item)): 42 # 最后一个元素换行,非最后则以','隔开 43 if i == len(item)-1: 44 f.write(item[i]) 45 f.write('\n') 46 else: 47 f.write(item[i]+',') 48 49 def main(): 50 # 每次执行前检查文件是否存在,存在则删除 51 if os.path.exists(file_name): 52 os.remove(file_name) 53 54 # 分页爬取 55 for page in range(MAX_PAGE+1): 56 html = getHtml(page) 57 content = getTarget(html) 58 for item in content: 59 save_to_txt(item) 60 61 if __name__ == '__main__': 62 main()
View Code
2.xpath实现
1 import os 2 import requests 3 from requests.exceptions import RequestException 4 from lxml import etree 5 import pymongo 6 from spiders.前程无忧.mongo_config import * 7 8 # mongo数据库设置 9 client = pymongo.MongoClient(MONGO_URL) 10 db = client[MONGO_DB] 11 12 MAX_PAGE = 5 13 KEYWORD = 'python' 14 headers = { 15 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) '\ 16 'Chrome/63.0.3239.132 Safari/537.36' 17 } 18 file_name = 'xpath_job51_python.txt' 19 20 # 获取网页 21 def get_html(page): 22 try: 23 url = 'https://search.51job.com/list/040000,000000,0000,00,9,99,{},2,{}.html?'.format(KEYWORD,page) 24 response = requests.get(url,headers=headers) 25 response.encoding = response.apparent_encoding 26 return response.text 27 except RequestException: 28 return None 29 30 # 解析网页 31 def parse_html(html): 32 # 构造xpath解析对象,可自动修整HTML文本 33 html = etree.HTML(html) 34 # 获取文本 /text() 35 # 获取属性 /@href 36 # 获取第i个标签 /tar_name[i] 从1开始 37 # normalize-space-->去空格换行符 38 # position_name = html.xpath('normalize-space(//div[@class="el"]/p/span/a/text())') 39 40 # 职位名称, 41 position_names = [] 42 for name in html.xpath('//div[@class="el"]/p/span/a/text()'): 43 position_name = name.strip() 44 position_names.append(position_name) 45 46 # 职位地址 47 position_urls = html.xpath('//div[@class="el"]/p/span/a/@href') 48 49 # 公司名称 50 company_names = html.xpath('//div[@class="el"]/span[1]/a/text()') 51 52 # 公司地址 53 company_urls = html.xpath('//div[@class="el"]/span[1]/a/@href') 54 55 # 位置 56 locations = html.xpath('//div[@class="el"]/span[@class="t3"]/text()') 57 58 # 薪资 59 salarys = html.xpath('//div[@class="el"]/span[@class="t4"]/text()') 60 61 # 发布时间 62 release_dates = html.xpath('//div[@class="el"]/span[4]/text()') 63 64 result = zip(position_names,position_urls,company_names,company_urls,locations,salarys,release_dates) 65 return result 66 67 68 def save_to_txt(element): 69 with open(file_name,'a',newline='') as f: 70 for i in range(len(element)): 71 # data = ','.join(element[i]) 72 if i == len(element)-1: 73 f.write(element[i]) 74 f.write('\n') 75 else: 76 f.write(element[i]+',') 77 78 79 def save_to_mongo(element): 80 keys = ['position_name','position_url','company_name', 81 'company_url','location','salary','release_date'] 82 result = dict(zip(keys,list(element))) 83 if db[MONGO_TABLE_XPATH].insert(result): 84 print('数据成功存储到mongo数据库中') 85 return True 86 return False 87 88 # 遍历字典元素 89 # for k,v in result.items(): 90 # print(k,':',v) 91 for key in result: 92 print(key,':',result[key]) 93 94 95 96 def main(): 97 if os.path.exists(file_name): 98 os.remove(file_name) 99 for page in range(1,MAX_PAGE+1): 100 html = get_html(page) 101 elements = parse_html(html) 102 if elements: 103 for element in elements: 104 save_to_txt(element) 105 save_to_mongo(element) 106 107 if __name__ == '__main__': 108 main()
View Code
转载于:https://www.cnblogs.com/ray-mmss/p/9373742.html
爬取前尘无忧python职位信息并保存到mongo数据库相关推荐
- python爬取当当网的书籍信息并保存到csv文件
python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...
- 爬取奇书网各类小说信息并保存到excel中
一开始用的保存函数是将原来的文件内容替换掉,所以换了一种方法就可以追加数据内容了 两种方法的对比 1.追加数据的函数 old_file = xlrd.open_workbook('qishu.xls' ...
- 爬取网贷之家平台数据保存到mysql数据库
# coding utf-8 import requests import json import datetime import pymysqluser_agent = 'User-Agent: M ...
- 爬取前程无忧51job海量职位信息
准备阶段 前程无忧官网:https://www.51job.com/ 本文对职位的爬取以python职位为例. 现在网站的反爬措施比较强,但可以用selenium进行爬取,虽然速度相对较慢但是爬取的方 ...
- Scrapy框架学习 - 爬取豆瓣电影排行榜TOP250所有电影信息并保存到MongoDB数据库中
概述 利用Scrapy爬取豆瓣电影Top250排行榜电影信息,并保存到MongoDB数据库中 使用pymongo库操作MOngodb数据库 没有进行数据清洗 源码 items.py class Dou ...
- python爬取开源众包大厅多页任务信息保存到excel
python爬取开源众包大厅多页任务信息保存到excel python版本:py3.5 希望能给大家一些帮助,欢迎加好友讨论微信:18301618273 源码走起: #!/usr/bin/env py ...
- 爬虫实战4:爬取猫眼电影排名Top100的详细数据保存到csv文件
申明:资料来源于网络及书本,通过理解.实践.整理成学习笔记. 文章目录 猫眼电影 完整代码 运行结果 猫眼电影 完整代码 import time import requests import re i ...
- 爬取链家网二手房数据并保存到mongodb中
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 爬取链家网二手房数据并保存到mongodb中 文章目录 前言 一.爬虫的介绍 二.协程的介绍 三.css选择器 四.基于asyncio ...
- Python爬虫爬取智联招聘职位信息
目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 #coding:utf-8 import urllib2 import re import xlwtclass ZLZ ...
最新文章
- 在线学位课程_如何选择计算机科学学位课程
- 最长有效括按号长度(利用栈解决java语言)
- RStudio中,出现中文乱码问题的解决方案
- HotSpot 虚拟机垃圾回收算法实现
- linux定时结束java进程_使用zt-exec库定时清理linux休眠进程
- Linux在U盘安装python的过程详解
- 银行业DevOps状态:来自DOES 2018伦敦大会的报告
- android 看门狗引起crash分析
- clousx6机器人怎么导入词库_clousx6词库编程从零入门:3
- 【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout -1;易邮SMTP服务器无法启动;
- 74系列芯片功能说明
- 白噪声的matlab程序,matlab产生白噪声信号
- 早间简评:黄金亚盘快速下跌 1300关口岌岌可危?
- unity中计算三角形的外接圆
- 用node写sdk脚本
- 作业Android自我介绍
- SQLALCHEMY_TRACK_MODIFICATIONS adds significant异常的解决方法
- 电商技术架构演进过程——具体到每一个技术
- 【java】 1到100阶乘之和 大数计算
- 学区房入学条件-查查吧深圳学区房地图
热门文章
- eclipse找不到dynamic_Eclipse Juno在Dynamic Web Project中没有JSP(但其他...
- GPU Gems2 - 13 动态环境光遮蔽与间接光照(Dynamic Ambient Occlusion and Indirect Lighting)
- 【TensorFlow-windows】学习笔记一——基础理解
- 入门 | 初学者必读:解读14个深度学习关键词
- Calendar是日历类
- BZOJ 4551树题解
- 第二阶段个人冲刺08
- cocos2d-x返回Android游戏黑屏解决办法
- 面向对象与基于对象 区别
- MFC的sendmessage和postmessage 以及sendmessagetimeout