校招助手数据存储PyMySQL

之前做了招聘会信息提醒之微信机器人,微信群已经建了5个,总体的用户大概有不到两千人。小目标是让西电今年找工作的人都能用上。 和几个小伙伴一拍即合,做个小程序吧! 老生长谈,爬虫的三步走:

  • 模拟登陆
  • 数据下载
  • 数据存储

今天就做了这第三步。作为小程序的数据来源。

建数据库

建库建表。

要注意的问题:

  • infoid 选择自动递增
  • contents的文本信息较多,应选择text

数据库链接

Python中先导入PyMySQL,链接语句(私密信息已做处理):

connection = pymysql.connect(host='XXXX', user='XXX', password='XXX', db='campushire', charset='utf8',
                                     cursorclass=pymysql.cursors.DictCursor)
cur = connection.cursor()
cur.execute("USE campushire")

这样就可以链接到数据库,选择自己要插入数据的表。

插入数据

数据好插入,复杂的地方在于如何插入自己想要的数据,剔除掉不想要的数据。简单的几个函数,这里还是要再次提及,之前有使用过,但是又忘了。。。

[s.extract() for s in tiao_bsObj.findAll('p', attrs={'class': "windowClose"})]

嗯,这个的语句的意思是,去除指定标签下的所以内容。这里用于剔除睿思具体内容之前的编辑信息,以及就业信息网上的关闭窗口等等诸如此类不是正文的信息。

插入语句:

cur.execute("INSERT INTO hireinfo (title,links,viewnum,class,contents) VALUES (\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")", (P,L,V,C,R))
cur.connection.commit()
time.sleep(3)

插入,提交。延时还是要做的,好像是之前访问数据库太快导致中断???

需要注意的是,表里列的名称要写对,以及VALUES的个数,还有后面要插入的数据与之前的一一对应。

基本这样就OK了。

吃饭去,饿死了。

代码:

# coding:utf - 8
import urllib.request
import sys, io
from bs4 import BeautifulSoup
import itchat
from datetime import datetime
import time
import re
import _thread
from urllib.request import urlopen
from urllib import request
from bs4 import BeautifulSoup
import time  # 导入包
import urllib.request
import pymysql
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')

# from __future__ import with_statement
import contextlib
try:
    from urllib.parse import urlencode
except ImportError:
    from urllib import urlencode
try:
    from urllib.request import urlopen
except ImportError:
    from urllib2 import urlopen
import sys

def getPageContent(url):
    headers = {'User-Agent' : 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0'}
    req = urllib.request.Request(url=url,headers=headers)
    try:
        res = urllib.request.urlopen(req)
    except urllib.error.URLError as e:
        return e
    page_content = res.read()
    page_content=BeautifulSoup(page_content,"lxml")
    return page_content



    itchat.send_msg(jobinfo2, userName)

def make_tiny(url):
    request_url = ('http://tinyurl.com/api-create.php?' +
                   urlencode({'url': url}))
    with contextlib.closing(urlopen(request_url)) as response:
        return response.read().decode('utf-8')






def timer(n):
    itchat.auto_login(hotReload=True)  # 可设置hotReload = True
    time.sleep(n)

def rs():
    pageURL = set()
    # job_rs = '?今日睿思校园招聘'+"\n"+'[机器喵自动获取,仅供参考]'+"\n"+'有问题请艾特群主@肖洒'+"\n"+'更多有意思的小玩意'+"\n"+'?https://x-nicolo.github.io/'+"\n"+"--------------------"+"\n"
    for i in range(1, 10):
        pages = 'http://rsbbs.xidian.edu.cn/forum.php?mod=forumdisplay&fid=554&page=' + str(i) + '&mobile=2'
        if pages not in pageURL:
            headers = {
                'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                              r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
                'Referer': r'http://rsbbs.xidian.edu.cn',
                'Connection': 'keep-alive'}
            req = request.Request(pages, headers=headers)
            html = request.urlopen(req)
            bsObj = BeautifulSoup(html.read(), "lxml")
            [s.extract() for s in bsObj.findAll('i', attrs={'class': "pstatus"})]
            tiezi = bsObj.findAll("ul")
            for tiaos in tiezi:
                for tiao in tiaos.findAll('a'):
                    for person in tiao.findAll('span', attrs={'class': "by"}):
                        T = person.get_text().strip()
                        [s.extract() for s in tiao.findAll('span', attrs={'class': "by"})]
                    # title
                    P = tiao.get_text().strip().strip('【散金币】').strip('【金币】').strip('(散金币)').strip('(金币)') 
                    if 'href' in tiao.attrs:
                        try:
                            tiao_links = "http://rsbbs.xidian.edu.cn/" + tiao.attrs['href']
                            tiao_html = urlopen(tiao_links)
                            L=str(make_tiny(tiao_links))
                            tiao_bsObj = BeautifulSoup(tiao_html.read(), "lxml")
                            [s.extract() for s in tiao_bsObj.findAll('i', attrs={'class': "pstatus"})]
                            content = tiao_bsObj.findAll("div", {"class": "message"})[0]
                            R = content.get_text().strip()
                            V=0
                            C='rs'

                        except (ValueError, IndexError) as e:
                            pass
                        pageURL.add(pages)
                                            
                        cur.execute("INSERT INTO hireinfo (title,links,contents,viewnum,class) VALUES (\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")", (P,L,R,V,C))
                        cur.connection.commit()
        time.sleep(3)  # 设置时间间隔为3秒

def xdjobs():
    # job_rs = '?就业信息网最新10条信息'+"\n"+'[机器喵自动获取,仅供参考]'+"\n"+'有问题请艾特群主@肖洒'+"\n"+'更多有意思的小玩意'+"\n"+'?https://x-nicolo.github.io/'+"\n"+"--------------------"+"\n"
    url = 'http://job.xidian.edu.cn/html/zpxx/jobs/'
    headers = {'User-Agent' : 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0'}  
    req = urllib.request.Request(url=url,headers=headers)
    res = urllib.request.urlopen(req)
    page_content = res.read()
    page_content=BeautifulSoup(page_content,"lxml")
    job_content = page_content.find("div", {"class": "content"})
    rows = job_content.findAll("span")
    job_info=[]
    for row in rows:
        for cell in row.findAll('a'):
            info=cell.get_text()
            P = cell.get_text().strip()
            tiao_links = "http://job.xidian.edu.cn" + cell.attrs['href']
            L=str(make_tiny(tiao_links))

            tiao_html = urllib.request.Request(url=tiao_links,headers=headers)
            tiao_res = urllib.request.urlopen(tiao_html)
            tiao_bsObj = BeautifulSoup(tiao_res.read(), "lxml")

            [s.extract() for s in tiao_bsObj.findAll('p', attrs={'class': "windowClose"})]
            [s.extract() for s in tiao_bsObj.findAll('p', attrs={'class': "arcInfo"})]

            [s.extract() for s in tiao_bsObj.findAll('a', attrs={'href': "javascript:window.print()"})]
            [s.extract() for s in tiao_bsObj.findAll('a', attrs={'href': "javascript:window.close()"})]
            [s.extract() for s in tiao_bsObj.findAll('div', attrs={'class': "context"})]
            
            content = tiao_bsObj.findAll("div", {"class": "content"})[0]
            R = content.get_text().strip()
            # print(R)

            V=0
            C="就业信息网"

            cur.execute("INSERT INTO hireinfo (title,links,viewnum,class,contents) VALUES (\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")", (P,L,V,C,R))
            cur.connection.commit()
            time.sleep(3) 

connection = pymysql.connect(host='XXX', user='XXX', password='XXX', db='campushire', charset='utf8',
                                     cursorclass=pymysql.cursors.DictCursor)
cur = connection.cursor()
cur.execute("USE campushire")
xdjobs()
rs()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Laoqi's Linux运维专列

每日shell练习题

2.2K30
来自专栏杨建荣的学习笔记

关于生产系统锁问题的排查(r3笔记第79天)

今天生产系统中的一个daemon出现了严重的数据处理延迟,客户需要我们立即给出处理的方案。在综合评估之后,为了不保证在线业务延迟,开发部门给出了临时的解决意见。...

30750
来自专栏Java学习123

powerdesigner 15 如何导出sql schema

34970
来自专栏Jerry的SAP技术分享

一种轻量级的C4C业务数据同步到S4HANA的方式:Odata通知

SAP Cloud for Customer和SAP其他传统产品的同步,除了使用SAP Netweaver Process Integration和SAP HA...

11620
来自专栏数据和云

深入剖析:oracle 的并行机制

刘盛,网名leonarding,the first ACEA in china, Oracle OCM10g&11g RHCE, ACOUG Core Memb...

36250
来自专栏乐沙弥的世界

rman 还原归档日志(restore archivelog)

     听说过还原(restore)数据库,表空间及数据库文件,使用归档日志恢复(recover)数据库,表空间,数据库文件。咦,还有还原归档日志这一说法呢?...

21240
来自专栏更流畅、简洁的软件开发方式

Step By Step 一步一步写网站[1] —— 帧间压缩,表单控件

记得在大学的时候,学习多媒体遇到了一个概念:帧内压缩和帧间压缩。我感觉我的第一篇里里面提到的我的那个方法有一点像帧间压缩,那么是不是把代码减少到极致了呢? 单看...

187100
来自专栏乐沙弥的世界

使用优化器性能视图获取SQL语句执行环境

    Oracle SQL语句的运行环境分为多个不同的层次,主要包括实例级别,会话级别,语句级别,其优先级依次递增。即语句级别的执行环境具 有最高的优先权,...

9620
来自专栏乐沙弥的世界

基于sqlcmd命令行工具管理SQL server

37050
来自专栏MasiMaro 的技术博文

自己写的驱动用CreateFile打开时错误码返回1的问题

就像题目上说的,今天在写一个例子代码时遇到了这个问题,下面是当时驱动层和应用层的代码:

27750

扫码关注云+社区

领取腾讯云代金券