备忘录

python爬虫实例

  近期公司开始着手大数据,python当然是一门必学语言,原来一直干的是Java,所以学python也不是太费力,看了大半天熟悉代码的语法和一些基本知识。当然我是崇尚实战的,不会多看这些理论,一般都是拿一个项目来写写,遇到问题对点解决,也能加快点步伐。当然就少不了爬虫了,python入门的一个练手级别项目,因此自己参考资料琢磨一个58的大数据职位分析,也就简单的几个方法。

  实现起来并不会太复杂,如下就是步骤:

  1. 首先找到一个58的招聘网址,找到源码,然后寻找需要匹配的信息的HTML元素
  2. 编写正则,去匹配你需要获取信息的那部分代码
  3. 从匹配到的代码中筛选出你需要的信息
  4. 将信息加工,存到txt文件中

  实际上实现一个爬虫无非就是这几个步骤,在我们编写的过程中需要用到urllib2,他有访问你要爬的网址的工具类,可以获取到你想要怕的网址的源代码,有了源代码以后,就要看你的正则水平了,最好把正则这块好好学习一下,否则你就有可能看着信息但是不知道匹配的正则怎么写。
  也不多说了,直接上代码,这些代码都不难,若是你学了python(即使你只是学了两天也就够了),看懂这些幼儿园级别的代码应该不是问题,没有什么好解释的地方

#-*- coding:utf-8 -*-
import urllib2
import re



class Spider:
    '''
        58的 一个 爬虫类
    '''


    def __init__(self):
        self.enable = True
        self.page = 1 #当前要爬去第几页

    def load_page(self, page):
        '''
            发送内涵段子url请求,得到html源码
        '''
        #爬虫要爬的页面链接
        url="http://tj.58.com/job/pn"+str(page)+"/?key=大数据"
        #request的headers中的user_agent属性
        user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
        headers = {"User-Agent": user_agent}
        req = urllib2.Request(url, headers = headers)
        response = urllib2.urlopen(req)
        html = response.read()
        #增则表达式匹配所有需要的信息
        #在正则中的所有(...)都会被识别并且会将这里面的匹配项给筛选出来,
        #其中有好多需要作为一个整体的表达式时会用到(),所以筛选出来的元组元素会有空串
        pattern = re.compile(r'<span(\s|\s*)class="address.*?".*?>(.*?)</span>.*?<span.*?class="name">(.*?)</span>.*?<i(\s|\s*)class="icons.*?im-chat".*?data-im=.*?></i>.*?<p(\s|\s*)class="job_salary">(.*?)<i(\s|\s*)class="unit">.*?(title="(.*?)")', re.S)
        item_list = pattern.findall(html)
        return item_list

    def deal_one_page(self, item_list, page):
        '''
            处理一页的数据
        '''

        print "正在存储第%d 页大数据职位信息" %(page)
        for item in item_list:
            print "\n地址:"+item[1]+" \n职位:"+item[2]+"\n薪资:"+item[5]+"\n公司:"+item[7].replace("title=","").replace("\"","")
            str_=str("\n地址:"+item[1]+" \n职位:"+item[2]+"\n薪资:"+item[5]+"\n公司:"+item[7].replace("title=","").replace("\"",""))
            self.write_to_file(str_)
        print "第%d 页大数据职位信息存储完毕.." %(page)

    def write_to_file(self, txt):
        f = open('./myStory.txt', 'a')
        f.write(txt)
        f.write('\n-----------------------------------------------\n')
        f.close()
        return

    def do_work(self):
        '''
            提供跟用于交互的过程
            让爬虫去工作
        '''

        while self.enable:
            print "按回车继续"
            print "输出quit退出"
            command = raw_input()
            #输入quit退出,或者大于三页退出,因为不知道他有几页,我们就先爬三页
            if (command == "quit"):
                self.enable = False
                break;
            if self.page>3:
                self.enable = False
                break;
            item_list = self.load_page(self.page)
            self.deal_one_page(item_list, self.page)
            self.page += 1


#main
if __name__ == "__main__":
    #创建一个spider对象
    mySpider = Spider()
    mySpider.do_work()

人生苦短,我用Python