Python 爬取前程无忧

       当初自己在学爬虫时,因网上资料很多都是基于python2开发的,所以入门的时候走了不少弯路,为了减少大家少走弯路,今天就分享下基础入门爬虫。
       学python当然对python的就业方向要有所了解,这次的爬虫基于前程无忧,首先打开网址 http://www.51job.com/
然后输入python 如下图所示:

这里写图片描述


进入网站后可以看到网址信息和招聘信息

这里写图片描述

通过查看网址信息,发现网址有点复杂,是不是感觉可能不怎么方便去采集数据?别担心这其实可能是开发者故意干扰我们的,经过分析可以看到真正的有效网址如下:
http://search.51job.com/list/000000,000000,0000,00,9,99,python,2,1.html


然后翻阅第二页如下

这里写图片描述

经过分析可知参数仅仅改变了数字,而其对应的网址如下:

http://search.51job.com/list/000000,000000,0000,00,9,99,python,2,2.html

依次类推,以后的网页都可以通过改变一个参数就可以得到



右键检查便很轻松的可以得到对应网页的位置

这里写图片描述

如获取职位名称 第一个标题t1 = soup.select(‘.t1 span a’)[0].text


薪资t4 = soup.select(‘.t4’)[1].text 可以发现薪资soup.select(‘.t4’)[0].text并不是对应第一个招聘信息的薪水


源代码如下:
import requests
from bs4 import  BeautifulSoup
import xlwt
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36'
}
def get_html():
    k=1 #参数k代表存储到excel的行数
    wb = xlwt.Workbook()  # 创建工作簿
    f = wb.add_sheet("招聘信息")  # 创建工作表
    '''
    下方的循环是将Excel表格中第一行固定
    Excel表第一行的前五列分别对应 职位、公司、工作地点、薪水、发布日期
    '''
    raw = ['职位', '公司', '工作地点', '薪水', '发布日期']
    for i in range(len(raw)):
        f.write(0, i, raw[i])
        '''
        write函数中第一个参数表示存储到多少行
        第二各参数存储到多少列表,第三个参数代表存储到对应行列的值
        '''
    url='http://search.51job.com/list/000000,000000,0000,00,9,99,python,2,{}.html'
    try:
        for page in range(12):#解析前11页
            res = requests.get(url.format(page))
            res.encoding = 'gbk'
            if res.status_code == 200:
                soup = BeautifulSoup(res.text, 'lxml')
                t1 = soup.select('.t1 span a')
                t2 = soup.select('.t2 a')
                t3 = soup.select('.t3')
                t4 = soup.select('.t4')
                t5 = soup.select('.t5')
                for i in range(len(t2)):
                    job = t1[i].get('title')#获取职位
                    href = t2[i].get('href')#获取链接
                    company = t2[i].get('title')#获取公司名
                    location = t3[i+1].text#获取工作地点
                    salary = t4[i+1].text#获取薪水
                    date = t5[i+1].text#获取发布日期
                    print(job + " " + company + " " + location + " " + salary + " " + date + " " + href)
                    f.write(k,0,job)
                    f.write(k,1,company)
                    f.write(k,2,location)
                    f.write(k,3,salary)
                    f.write(k,4,date)
                    k+=1#每存储一行 k值加1
        wb.save('招聘.csv')#写完后掉用save方法进行保存
    except TimeoutError:
        print("请求失败")
        return  None
if __name__=='__main__':
    get_html()
小提示:记得先安装xlwt库,不然运行程序会报错哟
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值