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. def save_to_txt(item):
  39. with open(file_name,'a',newline='') as f: # newline参数防止两行之间有空行
  40. for i in range(len(item)):
  41. # 最后一个元素换行,非最后则以','隔开
  42. if i == len(item)-1:
  43. f.write(item[i])
  44. f.write('\n')
  45. else:
  46. f.write(item[i]+',')
  47.  
  48. def main():
  49. # 每次执行前检查文件是否存在,存在则删除
  50. if os.path.exists(file_name):
  51. os.remove(file_name)
  52.  
  53. # 分页爬取
  54. for page in range(MAX_PAGE+1):
  55. html = getHtml(page)
  56. content = getTarget(html)
  57. for item in content:
  58. save_to_txt(item)
  59.  
  60. if __name__ == '__main__':
  61. main()

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. def save_to_txt(element):
  68. with open(file_name,'a',newline='') as f:
  69. for i in range(len(element)):
  70. # data = ','.join(element[i])
  71. if i == len(element)-1:
  72. f.write(element[i])
  73. f.write('\n')
  74. else:
  75. f.write(element[i]+',')
  76.  
  77. def save_to_mongo(element):
  78. keys = ['position_name','position_url','company_name',
  79. 'company_url','location','salary','release_date']
  80. result = dict(zip(keys,list(element)))
  81. if db[MONGO_TABLE_XPATH].insert(result):
  82. print('数据成功存储到mongo数据库中')
  83. return True
  84. return False
  85.  
  86. # 遍历字典元素
  87. # for k,v in result.items():
  88. # print(k,':',v)
  89. for key in result:
  90. print(key,':',result[key])
  91.  
  92. def main():
  93. if os.path.exists(file_name):
  94. os.remove(file_name)
  95. for page in range(1,MAX_PAGE+1):
  96. html = get_html(page)
  97. elements = parse_html(html)
  98. if elements:
  99. for element in elements:
  100. save_to_txt(element)
  101. save_to_mongo(element)
  102.  
  103. if __name__ == '__main__':
  104. main()
  1.  

爬取前尘无忧python职位信息并保存到mongo数据库的更多相关文章

  1. python爬取当当网的书籍信息并保存到csv文件

    python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...

  2. 爬取网贷之家平台数据保存到mysql数据库

    # coding utf-8 import requests import json import datetime import pymysql user_agent = 'User-Agent: ...

  3. Python scrapy爬虫数据保存到MySQL数据库

    除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...

  4. python爬取智联招聘职位信息(多进程)

    测试了下,采用单进程爬取5000条数据大概需要22分钟,速度太慢了点.我们把脚本改进下,采用多进程. 首先获取所有要爬取的URL,在这里不建议使用集合,字典或列表的数据类型来保存这些URL,因为数据量 ...

  5. python爬取智联招聘职位信息(单进程)

    我们先通过百度搜索智联招聘,进入智联招聘官网,一看,傻眼了,需要登录才能查看招聘信息 没办法,用账号登录进去,登录后的网页如下: 输入职位名称点击搜索,显示如下网页: 把这个URL:https://s ...

  6. 爬取拉勾网所有python职位并保存到excel表格 对象方式

    # 1.把之间案例,使用bs4,正则,xpath,进行数据提取. # 2.爬取拉钩网上的所有python职位. from urllib import request,parse import json ...

  7. scrapy 第一个案例(爬取腾讯招聘职位信息)

    import scrapy import json class TzcSpider(scrapy.Spider): # spider的名字,唯一 name = 'tzc' # 起始地址 start_u ...

  8. 简单抓取安居客房产数据,并保存到Oracle数据库

    思路和上一篇差不多,先获取网站html文件,使用BeautifulSoup进行解析,将对应属性取出,逐一处理,最后把整理出的记录保存到oracle中,持久化储存. '''Created on 2017 ...

  9. 多线程爬取猫眼电影TOP100并保存到mongo数据库中

    import requests import re import json from requests.exceptions import RequestException from multipro ...

随机推荐

  1. 防止vi粘贴时自动添加缩进的方法

    使用Xshell连接Linux服务器,使用vi打开文件进行粘贴时,会自动在行首添加很多空格,导致格式错乱.可以用如下方法剞劂 在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而 ...

  2. Java中编码问题

    在开发过程中经常会遇到一会乱码问题,不是什么大问题,但是也挺烦人的,今天来将我们开发总结的经验记录下来,希望可以给大家一些帮助. 一些概念: 字符:人们使用的记号,抽象意义上的一个符号.比如:‘1’, ...

  3. (二)Lucene之根据关键字搜索文件

    前提:在使用lucene进行搜索的时候,必须先生成索引文件,即必须先进行上一章节的案例,生成索引文件如下: 该索引文件为"segments"开头,如果没有该文件则说明没有索引文件则 ...

  4. ajax:用于创建快速动态网页的技术

    ajax是一种用于创建快速动态网页的技术. 异步的javascript和XML(JSON),主要是完成一个局部刷新. 异步:你传输吧,我先干我自个儿的事,你传好了告诉我一声 同步:你传输,我停下活儿看 ...

  5. XCode5环境下利用crash log调试线上Crash的流程

    1.前言 本文主要介绍在XCode5环境下,如何根据App自己生成的crashlog来调试真机上运行时产生的crash问题. 2. 步骤 (1)构造一段会crash的代码,并放到viewDidLoad ...

  6. perl自定义简易的面向对象的栈与队列类

    perl中的数组其实已经具备了栈与队列的特点,下面是对数组经过一些封装的stack,queue对象 1.Stack类 创建一个Stack.pm文件 package Stack; sub new{ $s ...

  7. wince如何扫描条码并且在浏览器上查询数据

    这个挺简单的,winform也适用 public override void OnGetBarcode(string scanStr) { try { Process.Start("iesa ...

  8. swoole| swoole 协程初体验 转

    swoole| swoole 协程初体验   date: 2018-5-30 14:31:38title: swoole| swoole 协程初体验description: 通过协程的执行初窥 swo ...

  9. shell 数组介绍

    平时的定义a=1;b=2;c=3,变量如果多了,再一个一个定义很繁琐,并且取变量值也很累.简单的说,数组就是各种数据类型的元素按一定顺序排列的集合. 数组就是把有限个元素变量或数组用一个名字命名,然后 ...

  10. Image Processing and Analysis_8_Edge Detection:Learning to Detect Natural Image Boundaries Using Local Brightness, Color, and Texture Cues ——2004

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...