爬取前尘无忧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 ...
随机推荐
- JAVA_split 字符串按照 . 分割
split 按照 . 分割字符串时 需要进行转义 代码: String[] str = obj_str.split("\\.") split 按照 \ 分割字符串时 需要多次转义 ...
- Spring Bean装配详解(五)
装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中. 大部分场景下,我们都会使用 Appl ...
- 机器学习-svd实现人脸识别
加载sklearn中的人脸数据集 from sklearn.datasets import fetch_lfw_people faces = fetch_lfw_people() 执行上面的第二行程序 ...
- 【数据结构】P1165 日志分析
题目描述 MM 海运公司最近要对旗下仓库的货物进出情况进行统计.目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志.该日志记录了两类操作:第一类操作为集装箱入库操作,以及该次入库的集装箱重量:第 ...
- vue.js移动端app:初始配置
本系列将会用vue.js2制作一个移动端的webapp单页面,页面不多,大概在7,8个左右,不过麻雀虽小,五脏俱全,常用的效果如轮播图,下拉刷新,上拉加载,图片懒加载都会用到.css方面也会有一些描述 ...
- Spring (1)框架
Spring第一天笔记 1. 说在前面 怎样的架构的程序,我们认为是一个优秀的架构? 我们考虑的标准:可维护性好,可扩展性好,性能. 什么叫可扩展性好? 答:就是可以做到,不断的增加代码,但是可以 ...
- 2019杭电多校一 A. Blank (dp)
大意: 长为$n$的数组, 每个位置范围$[0,3]$, $m$个限制$(l,r,x)$表示$[l,r]$内有$x$种数, 求方案数. 维护每个数字最后一次出现位置, 暴力$DP$ 实现时有个技巧是把 ...
- BZOJ4566 HAOI2016找相同字符(后缀自动机)
对第一个串建SAM,第二个串在上面跑,记录当前前缀匹配的最长后缀长度l,每次考虑当前前缀的贡献,对于当前所在节点显然是|right|*(l-len[fa]),而对于其parent树上所有祖先的贡献显然 ...
- Java MergeSort
Java MergeSort /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternational ...
- JFinal(1)JFinal helloworld
** java的极速开放框架:Final 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful MVC架构,设 ...