/job_address

抓取各大招聘网站搜索的求职信息,并动态保存在数据库上且利用用django生成的页面动态获取动态显示,并将最终结果公司信息在百度地图上显示出来。

Primary LanguagePython

# job_address
项目介绍:
    这是一个从招聘网站爬职位,显示到网页端的项目。

描述流程:
登录 ==》 搜索界面 ==》 提交搜索内容之后 ==》 调到展示界面 == 数据库有数据 ==》 直接读取数据库展示到界面
                                                          |
                                                           ==  数据库没有  ==》 调用爬虫去爬取,爬到一条,加到数据库
                                                                                                          并展示到界面
函数流程:
login ------ search ----  show ---- show.html -- map.html
  |            |            |
  |            |            |
  register-login            |
                            |
                         调用爬虫
                            |
                         Merge_Url -- handledata  |-- toTable    --| --- show.html  -- map.html
                                                  |-- toUrlData  --|

应用技术:
爬虫:
    selenium, requests, urllib2 爬取界面
    re, lxml, bs4 提取所需数据
    多线程,协程快速爬取网页信息
    分布式,多机器爬取数据

数据库:
    MySql存储数据

后台:
    Django,
        自定义错误页面
        用户的注册登录
        搜索功能
        可配置每页显示几条数据
    bootsrap搭建基本页面
    调用百度地图接口,在百度地图上显示一个或全部公司。
    实现一边爬取数据一边显示到页面
    ajax实现页面局部刷新, 实现分页功能

爬虫中使用yield实现,爬到一条url就爬一条具体内容数据,
view.py 和 爬虫py 内容数据的传递 通过 队列。deque

2017-9-17:
    显示数据:
        两种情况,
            1、一种是,数据库中已有数据,直接读取,计算数据量,实现分页
            2、二种是,数据库没有这个表,要去现爬,
        1、直接从数据库读,转成字典的列表后,传到show.html界面进行处理。
        2、使用ajax定时去后台请求数据。每隔两秒,
            数据爬下来后,保存到数据库的同时,把数据保存到队列中,
            当ajax隔了两秒后,把队列中个东西读走,转成字典的列表, 显示到界面。
            py传数据去界面:
                from django.http import JsonResponse

                def a(request):  // 简略版
                    return JsonResponse(datalistb, safe=False)

2017-9-18:
    实现分页:(重点:获取标签,加标签,加属性,去属性,隐藏显示标签。)
        两种情况,
            1、一种是,数据库中已有数据,直接读取,计算数据量,实现分页
            2、二种是,数据库没有这个表,要去现爬,
        1、① 计算数据量,a
              规定每页显示数据条数, everynums
              a / everynums = c , 即有多少页
           ② 默认所有数据隐藏, 在shou.html中对应标签加属性 style="display:none;"
              默认显示第一页的    $('tr').slice(1, everynums).removeAttr('style')  // 第0个 为标题
              再给页码加上点击事件,实现点击时显示相应页码的数据
              点击的页码 pagenum
              首先隐藏其他页的,即上一次显示的页的内容
              上一次显示的页码 prepagenum
              $('tr').slice((prepagenum-1)*everynums+1, prepagenums*everynums+1).attr('style', 'display:none')
              再显示这次点击的页码的内容
              $('tr').slice((pagenum-1)*everynums+1, pagenum*everynums+1).removeAttr('style')
        2、① 目标:
                默认显示第一页内容,
                有新内容加到最后,翻页时显示
           ② 先隐藏前面点击的页,再显示这次点击的页,同上, 同一套代码

2017-9-27:
    1、自定义自己的错误页面。
        定制404错误页面。
        ① 在templates文件夹下,新建错误html文件
        ② 修改settings.py
            DEBUG = False
            ALLOWED_HOSTS = ['*']
        ③ 在views.py中写函数
            # 404 自定义404错误页
            def page_not_found(request):
                return render(request, '404.html')
        ④ 在 flame 的urls.py中写:
            handler404 = 'views.page_not_found'

2017-9-28
    1、修改search.html页面,form的提交方式为get,这样刷新show.html时就不会提示是否重新提交表单了。
    2、{% csrf_token %} , 放开'django.middleware.csrf.CsrfViewMiddleware'时,在form表单中添加这句话。就可正常提交post请求了。