爬取前尘无忧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 ...
随机推荐
- 防止vi粘贴时自动添加缩进的方法
使用Xshell连接Linux服务器,使用vi打开文件进行粘贴时,会自动在行首添加很多空格,导致格式错乱.可以用如下方法剞劂 在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而 ...
- Java中编码问题
在开发过程中经常会遇到一会乱码问题,不是什么大问题,但是也挺烦人的,今天来将我们开发总结的经验记录下来,希望可以给大家一些帮助. 一些概念: 字符:人们使用的记号,抽象意义上的一个符号.比如:‘1’, ...
- (二)Lucene之根据关键字搜索文件
前提:在使用lucene进行搜索的时候,必须先生成索引文件,即必须先进行上一章节的案例,生成索引文件如下: 该索引文件为"segments"开头,如果没有该文件则说明没有索引文件则 ...
- ajax:用于创建快速动态网页的技术
ajax是一种用于创建快速动态网页的技术. 异步的javascript和XML(JSON),主要是完成一个局部刷新. 异步:你传输吧,我先干我自个儿的事,你传好了告诉我一声 同步:你传输,我停下活儿看 ...
- XCode5环境下利用crash log调试线上Crash的流程
1.前言 本文主要介绍在XCode5环境下,如何根据App自己生成的crashlog来调试真机上运行时产生的crash问题. 2. 步骤 (1)构造一段会crash的代码,并放到viewDidLoad ...
- perl自定义简易的面向对象的栈与队列类
perl中的数组其实已经具备了栈与队列的特点,下面是对数组经过一些封装的stack,queue对象 1.Stack类 创建一个Stack.pm文件 package Stack; sub new{ $s ...
- wince如何扫描条码并且在浏览器上查询数据
这个挺简单的,winform也适用 public override void OnGetBarcode(string scanStr) { try { Process.Start("iesa ...
- swoole| swoole 协程初体验 转
swoole| swoole 协程初体验 date: 2018-5-30 14:31:38title: swoole| swoole 协程初体验description: 通过协程的执行初窥 swo ...
- shell 数组介绍
平时的定义a=1;b=2;c=3,变量如果多了,再一个一个定义很繁琐,并且取变量值也很累.简单的说,数组就是各种数据类型的元素按一定顺序排列的集合. 数组就是把有限个元素变量或数组用一个名字命名,然后 ...
- Image Processing and Analysis_8_Edge Detection:Learning to Detect Natural Image Boundaries Using Local Brightness, Color, and Texture Cues ——2004
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...