一个人才数据网的爬虫软件

最近表哥让我帮他写个软件,定时爬取一个人才数据网站的信息,思路和方法很简单,不过过程中遇到的坑真的不少,今天对整个软件的开发过程做个记录。
网站是 余姚人才网,链接就不上了,百度第一个就是。
还是老样子,python+request+beautifulsoup4 三把斧,这个是整个软件的核心,
先写一个请求网页的函数


def get(url):
    try:
        response = requests.get(url)
        return response.text
    except EOFError:
        raise 'error'

用到了request库,利用request.get() 方法向网站请求,然后return 网站的文本信息,如果请求不成功则抛出异常。

然后写一个解析网页的结构的函数,利用的是beautifulsoup库,注意导入库的时候要从 bs4 中导入,如 from bs4 import BeautifulSoup


def makesoup(response):
    listt=[]
    soup = BeautifulSoup(response,'lxml')
    soup = soup.find_all(attrs='li',class_='seaList13')
    for i in soup:
         listt.append(i.text)
    return listt

先用Beautifulsoup(),将请求解析,用的是lxml解析器,这个解析器也需要安装,用命令
pip install lxml 。 如此一锅‘美味汤’就煲出来了,然后去分析一下网站的html源码,发现我们要爬去的内容的标签都是这样的

  • 宁波永强不锈钢制品有限公司
  • 所以我们要解析的标签名是 li ,类名是 seaList13 ,所以我们可以这样寻找我们要的内容,

    soup = soup.find_all(attrs='li',class_='seaList13')

    找出所有标签名为li , class名为 sealist13 的标签,注意这里要用 class_ ,不然会和Python关键字冲突。

    接下来的代码就设计到了具体的需求,这里就不细讲了,但是有几个要注意的地方要提一下。
    爬去的数据我要保存在一个txt文件中,因此设计到了文件的打开,一开始我用的是 open() 这个Python自带的方法,打开方式为 a+ (以可读可写的方式打开,如不存在则创建,读取时从第一行开始读取,从最后一行开始增加),编码格式为utf-8,但是发现这个方法并不好用,大概是因为从网站上爬取的内容是utf-8编码的,但是信息在python内部中交流的时候又是Unicode编码的,需要不停地进行encode和decode,相当的麻烦并且不易开发。
    不过题主发现有个库特别好用,codecs,是标准库中的,用codecs.open()打开文件不用转码,模块会自动的解编码(大概??)
    比如要以utf8 的方式打开一个txt,并逐行加入一个列表中

    txt = codecs.open(r'mulu.txt', 'r', 'utf-8')
    yi_cun_zai = [k.strip() for k in txt]

    这里我为了图省事用的 是 a+的方式打开文件,但是后来发现怎么也读取不进列表,改了半天bug都没找到问题,后来改成了 r 终于可以写进列表了,但是不知道原因,要是有大佬知道还请指点下。

    下面还有一个难点是gui的制作,毕竟是要做个别人看的,老在dos下看肯定不方便。

    
    def on_go():
        root = Tk()
        t = Text(root)
        t.pack()
        for i in range(1):
            xian_shi_wo  =   get_yao_xian_shi_de_(i)
            for j in xian_shi_wo:
                winsound.Beep(500, 500)
                t.insert(INSERT, j+'         ')
                t.insert(INSERT, str(time.ctime())+'\n\r')
                t.mark_set('insert', 1.0)
                t.update()
                time.sleep(0.1)
        t.mainloop()
        ```
        用的是tkinter,思路大概是先创建一个根目录框,root=Tk(),然后接下来的每个组件都是在这个root下创建,t=Text(root),这个表示的是在root下创建一个text的组件,然后将t摆放好,t.pack(),在一切都设置好了以后将控件循环 , t.mainloop(),对了有个声音的空间挺有意思的

    import winsound
    winsoud.Beep(500,500)

    表示发出500(0~1000)大小的,持续时间500ms的蜂鸣声。
    
    到此为止整个程序的编写过程就结束了(还有些细节我没写,不代表没有)
    整个代码如下
    

    --coding:utf-8--

    from bs4 import BeautifulSoup
    import requests,codecs,urllib,sys
    import codecs
    from tkinter import *
    import time , datetime, winsound,queue

    def get(url):
    try:
    response = requests.get(url)
    return response.text
    except EOFError:
    raise ‘error’

    def makesoup(response):
    listt=[]
    soup = BeautifulSoup(response,’lxml’)
    soup = soup.find_all(attrs=’li’,class_=’seaList13’)
    for i in soup:
    listt.append(i.text)
    return listt

    def get_yao_xian_shi_de_(i):
    yi_cun_zai=[]
    yao_xian_shi_de_ = []

    txt = codecs.open(r'mulu.txt', 'r', 'utf-8')
    
    yi_cun_zai = [k.strip() for k in txt]
    
    txt.close()
    txt = codecs.open(r'mulu.txt', 'a+', 'utf-8')
    
    url = 'http://www.yyrc.com/job/?JobType=0&WorkPlace=0&Trade' \
          '=0&Property=0&JobProperty=0&Degree=0&WorkYears=0&Sex=0&MonthPay=0&' \
          'PublishDate=0&Key='+'%CD%E2%C3%B3'+'&Orderid=0&Styleid=2&PageNo='+str(i)
    response = get(url)
    list_1 = makesoup(response)
    list_1 = list(set(list_1))
    
    for j in list_1:
            if j in yi_cun_zai:
                continue
            else:
                #print(j)
                yao_xian_shi_de_.append(j)
                txt.write(j+'\r\n')
    
    txt.close()
    return yao_xian_shi_de_
    

    def on_go():
    root = Tk()
    t = Text(root)
    t.pack()
    for i in range(1):
    xian_shi_wo = get_yao_xian_shi_de_(i)
    for j in xian_shi_wo:
    winsound.Beep(500, 500)
    t.insert(INSERT, j+’ ‘)
    t.insert(INSERT, str(time.ctime())+’\n\r’)
    t.mark_set(‘insert’, 1.0)
    t.update()
    time.sleep(0.1)
    t.mainloop()

    if name == ‘main‘:

    while True:
        on_go()
    

    “`

    但是还有一步没做完,打包成exe文件,这个也折腾了我好久
    我用的是pyinstaller,也是一个库,可以直接pip install pyinstaller
    然后进入到python35/script 文件夹中,进入commend模式,执行语句:
    python pyinstaller.exe 你要打包的文件地址
    还有一些控制语句 -F表示 将所有东西都打包成一个.exe 文件,-w表示不显示dos框。
    如我要打包的程序是yuyao.py
    我的语句就是 python pyinstaller.exe -F -w yuyao.py
    这样一个exe文件就生成了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值