爬取前尘无忧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 ...
随机推荐
- 去掉右键Open Folderas Intellij IDEA Project
解决: WIN+R键打开运行,输入regedit 打开注册表 在地址栏输入: 计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\Powershell 然 ...
- WUSTOJ 1251: 报数游戏(Java)
1251: 报数游戏 原题链接 Description n个人站成一行玩一个报数游戏.所有人从左到右编号为1到n.游戏开始时,最左边的人报1,他右边的人报2,编号为3的人报3,等等.当编号为n的人(即 ...
- mac OS 安装qt环境
先安装xcode,然后从官网下载dmg安装包安装即可,这里主要出现一个问题就是创建的工程没法编译,提示没有构建包(kit) 要安装command line tool才行. 在命令行中输入: xcode ...
- 2019牛客多校三 A. Graph Games (图分块)
大意: 给定无向图, 定义$S(x)$为$x$的邻接点集合. 每次操作翻转$[L,R]$范围的边, 询问$S(x)$与$S(y)$是否相等. 快速判断集合相等可以用$CF 799F$的技巧. 采用$h ...
- Yet Another Problem On a Subsequence CodeForces - 1000D (组合计数)
大意:定义一个长为$k>1$且首项为$k-1$的区间为好区间. 定义一个能划分为若干个好区间的序列为好序列. 给定序列$a$, 求有多少个子序列为好序列. 刚开始一直没想出来怎么避免重复计数, ...
- Unity UGUI动态生成控件
一. 首先你得先清楚RectTransform组件的一些程序控制 1. 先得到UGUI控件上面的RectTransform组件 RectTransform rtr = gameObject.GetCo ...
- Html5+Mui前端框架,开发记录(二):提交不了数据?
1.Mui 请求Webapi接口,返回所需要的数据(get,post) mui.ajax({ url: getAddress() + '/api/Qiliu/get?jsoncallback=?', ...
- Java Web 深入分析(8) Servlet工作原理解析
Servlet Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态We ...
- Java 之 Hashtable 集合
Hashtable 集合 java.util.Hashtable<K,V>集合 implements Map<K,V>接口 Hashtable:底层也是一个哈希表,是一个线 ...
- SpringBoot中使用POI,快速实现Excel导入导出
导出Excel 整体来说,Excel有.xls和.xlsx,那么在POI中这两个也对应两个不同的类,但是类名不同,方法基本都是一致的,因此我这里将只介绍.xls一种. 整体来说,可以分为如下七个步骤: ...