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

View Code

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

View Code


转载于:https://www.cnblogs.com/ray-mmss/p/9373742.html

爬取前尘无忧python职位信息并保存到mongo数据库相关推荐

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

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

  2. 爬取奇书网各类小说信息并保存到excel中

    一开始用的保存函数是将原来的文件内容替换掉,所以换了一种方法就可以追加数据内容了 两种方法的对比 1.追加数据的函数 old_file = xlrd.open_workbook('qishu.xls' ...

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

    # coding utf-8 import requests import json import datetime import pymysqluser_agent = 'User-Agent: M ...

  4. 爬取前程无忧51job海量职位信息

    准备阶段 前程无忧官网:https://www.51job.com/ 本文对职位的爬取以python职位为例. 现在网站的反爬措施比较强,但可以用selenium进行爬取,虽然速度相对较慢但是爬取的方 ...

  5. Scrapy框架学习 - 爬取豆瓣电影排行榜TOP250所有电影信息并保存到MongoDB数据库中

    概述 利用Scrapy爬取豆瓣电影Top250排行榜电影信息,并保存到MongoDB数据库中 使用pymongo库操作MOngodb数据库 没有进行数据清洗 源码 items.py class Dou ...

  6. python爬取开源众包大厅多页任务信息保存到excel

    python爬取开源众包大厅多页任务信息保存到excel python版本:py3.5 希望能给大家一些帮助,欢迎加好友讨论微信:18301618273 源码走起: #!/usr/bin/env py ...

  7. 爬虫实战4:爬取猫眼电影排名Top100的详细数据保存到csv文件

    申明:资料来源于网络及书本,通过理解.实践.整理成学习笔记. 文章目录 猫眼电影 完整代码 运行结果 猫眼电影 完整代码 import time import requests import re i ...

  8. 爬取链家网二手房数据并保存到mongodb中

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 爬取链家网二手房数据并保存到mongodb中 文章目录 前言 一.爬虫的介绍 二.协程的介绍 三.css选择器 四.基于asyncio ...

  9. Python爬虫爬取智联招聘职位信息

    目的:输入要爬取的职位名称,五个意向城市,爬取智联招聘上的该信息,并打印进表格中 #coding:utf-8 import urllib2 import re import xlwtclass ZLZ ...

最新文章

  1. 在线学位课程_如何选择计算机科学学位课程
  2. 最长有效括按号长度(利用栈解决java语言)
  3. RStudio中,出现中文乱码问题的解决方案
  4. HotSpot 虚拟机垃圾回收算法实现
  5. linux定时结束java进程_使用zt-exec库定时清理linux休眠进程
  6. Linux在U盘安装python的过程详解
  7. 银行业DevOps状态:来自DOES 2018伦敦大会的报告
  8. android 看门狗引起crash分析
  9. clousx6机器人怎么导入词库_clousx6词库编程从零入门:3
  10. 【记录】【解决方案】java发邮件错误:Couldn‘t connect to host, port: localhost, 25; timeout -1;易邮SMTP服务器无法启动;
  11. 74系列芯片功能说明
  12. 白噪声的matlab程序,matlab产生白噪声信号
  13. 早间简评:黄金亚盘快速下跌   1300关口岌岌可危?
  14. unity中计算三角形的外接圆
  15. 用node写sdk脚本
  16. 作业Android自我介绍
  17. SQLALCHEMY_TRACK_MODIFICATIONS adds significant异常的解决方法
  18. 电商技术架构演进过程——具体到每一个技术
  19. 【java】 1到100阶乘之和 大数计算
  20. 学区房入学条件-查查吧深圳学区房地图

热门文章

  1. eclipse找不到dynamic_Eclipse Juno在Dynamic Web Project中没有JSP(但其他...
  2. GPU Gems2 - 13 动态环境光遮蔽与间接光照(Dynamic Ambient Occlusion and Indirect Lighting)
  3. 【TensorFlow-windows】学习笔记一——基础理解
  4. 入门 | 初学者必读:解读14个深度学习关键词
  5. Calendar是日历类
  6. BZOJ 4551树题解
  7. 第二阶段个人冲刺08
  8. cocos2d-x返回Android游戏黑屏解决办法
  9. 面向对象与基于对象 区别
  10. MFC的sendmessage和postmessage 以及sendmessagetimeout