爬取前尘无忧python职位信息并保存到mongo数据库
1.re实现
import re,os
import requests
from requests.exceptions import RequestException MAX_PAGE = 10 #最大页数
KEYWORD = 'python'
headers = {
'User-Agent':
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
file_name = 're_job51_python.txt' # 获取网页源码
def getHtml(page):
try:
url = 'https://search.51job.com/list/040000,000000,0000,00,9,99,{0},2,{1}.html?'.format(KEYWORD,page)
response = requests.get(url,headers=headers)
response.encoding = response.apparent_encoding
return response.text
except RequestException:
print('请求出错')
return None # 解析网页源码,得到目标信息
def getTarget(html):
reg = re.compile(
r'class="t1 ">.*? <a target="_blank" '
'title="(.*?)".*? <span class="t2"><a target="_blank" '
'title="(.*?)".*?<span '
'class="t3">(.*?)</span>.*?<span '
'class="t4">(.*?)</span>.*? <span '
'class="t5">(.*?)</span>',
re.S) # 匹配换行符
target = re.findall(reg,html)
return target # 保存到文本中
def save_to_txt(item):
with open(file_name,'a',newline='') as f: # newline参数防止两行之间有空行
for i in range(len(item)):
# 最后一个元素换行,非最后则以','隔开
if i == len(item)-1:
f.write(item[i])
f.write('\n')
else:
f.write(item[i]+',') def main():
# 每次执行前检查文件是否存在,存在则删除
if os.path.exists(file_name):
os.remove(file_name) # 分页爬取
for page in range(MAX_PAGE+1):
html = getHtml(page)
content = getTarget(html)
for item in content:
save_to_txt(item) if __name__ == '__main__':
main()
2.xpath实现
import os
import requests
from requests.exceptions import RequestException
from lxml import etree
import pymongo
from spiders.前程无忧.mongo_config import * # mongo数据库设置
client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB] MAX_PAGE = 5
KEYWORD = 'python'
headers = {
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) '\
'Chrome/63.0.3239.132 Safari/537.36'
}
file_name = 'xpath_job51_python.txt' # 获取网页
def get_html(page):
try:
url = 'https://search.51job.com/list/040000,000000,0000,00,9,99,{},2,{}.html?'.format(KEYWORD,page)
response = requests.get(url,headers=headers)
response.encoding = response.apparent_encoding
return response.text
except RequestException:
return None # 解析网页
def parse_html(html):
# 构造xpath解析对象,可自动修整HTML文本
html = etree.HTML(html)
# 获取文本 /text()
# 获取属性 /@href
# 获取第i个标签 /tar_name[i] 从1开始
# normalize-space-->去空格换行符
# position_name = html.xpath('normalize-space(//div[@class="el"]/p/span/a/text())') # 职位名称,
position_names = []
for name in html.xpath('//div[@class="el"]/p/span/a/text()'):
position_name = name.strip()
position_names.append(position_name) # 职位地址
position_urls = html.xpath('//div[@class="el"]/p/span/a/@href') # 公司名称
company_names = html.xpath('//div[@class="el"]/span[1]/a/text()') # 公司地址
company_urls = html.xpath('//div[@class="el"]/span[1]/a/@href') # 位置
locations = html.xpath('//div[@class="el"]/span[@class="t3"]/text()') # 薪资
salarys = html.xpath('//div[@class="el"]/span[@class="t4"]/text()') # 发布时间
release_dates = html.xpath('//div[@class="el"]/span[4]/text()') result = zip(position_names,position_urls,company_names,company_urls,locations,salarys,release_dates)
return result def save_to_txt(element):
with open(file_name,'a',newline='') as f:
for i in range(len(element)):
# data = ','.join(element[i])
if i == len(element)-1:
f.write(element[i])
f.write('\n')
else:
f.write(element[i]+',') def save_to_mongo(element):
keys = ['position_name','position_url','company_name',
'company_url','location','salary','release_date']
result = dict(zip(keys,list(element)))
if db[MONGO_TABLE_XPATH].insert(result):
print('数据成功存储到mongo数据库中')
return True
return False # 遍历字典元素
# for k,v in result.items():
# print(k,':',v)
for key in result:
print(key,':',result[key]) def main():
if os.path.exists(file_name):
os.remove(file_name)
for page in range(1,MAX_PAGE+1):
html = get_html(page)
elements = parse_html(html)
if elements:
for element in elements:
save_to_txt(element)
save_to_mongo(element) if __name__ == '__main__':
main()
爬取前尘无忧python职位信息并保存到mongo数据库的更多相关文章
- python爬取当当网的书籍信息并保存到csv文件
python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...
- 爬取网贷之家平台数据保存到mysql数据库
# coding utf-8 import requests import json import datetime import pymysql user_agent = 'User-Agent: ...
- Python scrapy爬虫数据保存到MySQL数据库
除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...
- python爬取智联招聘职位信息(多进程)
测试了下,采用单进程爬取5000条数据大概需要22分钟,速度太慢了点.我们把脚本改进下,采用多进程. 首先获取所有要爬取的URL,在这里不建议使用集合,字典或列表的数据类型来保存这些URL,因为数据量 ...
- python爬取智联招聘职位信息(单进程)
我们先通过百度搜索智联招聘,进入智联招聘官网,一看,傻眼了,需要登录才能查看招聘信息 没办法,用账号登录进去,登录后的网页如下: 输入职位名称点击搜索,显示如下网页: 把这个URL:https://s ...
- 爬取拉勾网所有python职位并保存到excel表格 对象方式
# 1.把之间案例,使用bs4,正则,xpath,进行数据提取. # 2.爬取拉钩网上的所有python职位. from urllib import request,parse import json ...
- scrapy 第一个案例(爬取腾讯招聘职位信息)
import scrapy import json class TzcSpider(scrapy.Spider): # spider的名字,唯一 name = 'tzc' # 起始地址 start_u ...
- 简单抓取安居客房产数据,并保存到Oracle数据库
思路和上一篇差不多,先获取网站html文件,使用BeautifulSoup进行解析,将对应属性取出,逐一处理,最后把整理出的记录保存到oracle中,持久化储存. '''Created on 2017 ...
- 多线程爬取猫眼电影TOP100并保存到mongo数据库中
import requests import re import json from requests.exceptions import RequestException from multipro ...
随机推荐
- PHP正则 正向预查&反向预查
了解正向预查&反向预查前,我们先要知道正则的2个函数:preg_match_all . preg_replace preg_match_all 可以看文章:点击查看 preg_replace ...
- vuex 理解
为什么要用vuex?页面由多个视图组成,用户操作会引视图的状态变化. 多个视图依赖于同一状态(例如:菜单导航) 来自不同视图的行为需要变更同一状态(例如:评论弹幕) vuex 的作用 为vue.js开 ...
- Skip List(跳跃表)原理详解与实现
ref : https://dsqiu.iteye.com/blog/1705530 本文内容框架: §1 Skip List 介绍 §2 Skip List 定义以及构造步骤 §3 Skip ...
- jacascript Math (算数)对象
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 实际应用中用的比较多的有:round(); random(); floor(); ceil(); 其次还有 ...
- (五)Activiti之查看最新版本的流程定义
一.查看最新版本的流程定义 因为每个流程定义都可能会有好几个版本,所以有时候我们有这样的需求,查询出最新版本的流程定义的集合 第一步:我们通过Activiti接口来获取根据流程定义Version升序排 ...
- 校验用户名是否存在(ajax+jackson)
只是简单的仿某度注册的用户名输入离焦后检验 目录结构 没有涉及到数据库 html <!DOCTYPE html> <html lang="en"> < ...
- 使用ctypes调用系统C API函数需要注意的问题,函数参数中有指针或结构体的情况下最好不要修改argtypes
有人向我反应,在代码里同时用我的python模块uiautomation和其它另一个模块后,脚本运行时会报错,但单独使用任意一个模块时都是正常的,没有错误.issue链接 我用一个例子来演示下这个问题 ...
- Layui 实现input 输入和选择
<div class="layui-col-md4"> <label class="layui-form-label">移交单位< ...
- 2019年6月SAP发布的未来ABAP平台的发展方向
未来ABAP平台将始终是这些产品的技术平台: S/4HANA On-Premises和Cloud将基于一个统一的ABAP codeline: SAP云平台上的ABAP编程环境: 什么是SAP Clou ...
- CSS基础 布局
1.布局的基本位置 top 距离上边的距离right 距离右边的距离bottom 距离下边的距离left 距离左边的距离 去掉布局时 html 的3mm ...