Python学习笔记(4)爬虫实战

引言

我们都知道学习一门语言的最好方法就是实战,今天来用python做一个爬虫实战一下。
什么是爬虫?这里我不做过多解释,大家可以百度搜索一下,自己了解了解。
要想爬取一个网站的资源,我们要做的第一步就是向网站请求数据,大多数网站都有反爬措施所以我们要模拟浏览器向网站发起请求。
以下是微软IE浏览器下的操作
我们先登录一个求职网站按Fn+F12打开网页调试窗口,查看复制你的用户代理

在这里插入图片描述

1 网页数据获取

例(1)网页数据获取

在给出代码之前我们需要用python导入几个爬虫相关的 库,我的pycharm默认是不带的需要自己安装。
具体安装方法我推荐一个人的博客(他写得很详细)有关PyCharm库的安装

# 导入相关库
import requests
import re
import xlwt
#  获取网站源码
def get_content(page):  # page是要爬去的页码
    #  由于page是数字要想和字符串拼接必须将数字转为字符串,所以使用'+str(page)+'
    url = 'https://search.51job.com/list/200200,000000,0000,00,9,99,%2B,2,'+str(page)+'.html'#  网址拼接
    headers ={  #模拟用户代理
   "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"
    }
    req = requests.get(url,headers=headers) #  开始发送请求数据
    req.encoding = 'gbk'  #网站的编码格式为gbk
    html = req.text  #  将返回的数据保存在html中
    return html
print(get_content(1))   #   之后爬取时将这条语句删掉

运行效果,我们可以看到控制台已经将网站的源码全部打印出来了。

在这里插入图片描述
接下来源码拿到手了我们要做的就是筛选出对我们有用的信息

2 数据筛选

筛选原则是按照正则表达式进行筛选,那么什么是正则表达式,其实我也不太懂,下去我也百度好好理解理解。程序的话我就直接套用了。首先来观察一下这个网站。

在这里插入图片描述
我们需要的信息无非就是5个 职位名公司名工作地点薪资发布时间
然后就是对已有的数据进行匹配筛选出我们需要的信息。

例(2)数据筛选

#  筛选数据

def get(html):
    # 按照正则表达式的原则进行匹配数据
    reg = re.compile(r'class="t1">.*?<a target="_blank" title="(.*?)".*?<span class="t2"><a target="_blank" title="(.*?)".*?<span class="t3">(.*?)</span>.*?<span class="t4">(.*?)</span>.*?<span class="t5"(.*?)</span>.*?',re.S)
    items = re.findall(reg,html) #  将匹配到的数据保存在items里
    return  items
namelist=[]#定义一个空列表用来保存数据

def save_data_to_namelist():    #将数据保存在namelist中
    for i in range(1,4):        #爬取前三页内容
        print('正在爬取第'+str(i)+'的信息...')
        html = get_content(i)
        for j in get(html):
            data = []
            for i in range(0,5):  #每页都有5个数据
                data.append(j[i])
            namelist.append(data)
    return
save_data_to_namelist() #  调用该函数爬取并保存网页内容
print(namelist)  #将保存的内容打印出来

运行结果
在这里插入图片描述

3 将数据存入Excel表格中

def save_data_to_excel(savezone):  #新建一个表格
    book = xlwt.Workbook(encoding='utf-8',style_compression=0)   #表格的相关操作
    sheet = book.add_sheet('51job',cell_overwrite_ok=True)    #  也属于表格的相关操作
    new_tuple = ('职位','公司','地址','薪资','发布日期')      #  新建一个元组(元组元素不可改变)
    for i in range (0,5):   
        sheet.write(0,i,new_tuple[i])       #  将元组的的数据写入表格的第0行第i列中
    for i in range (0,len(namelist)):
        data = namelist[i]      #将列表中每个数据拿出来
        for j in range(0,5) :        #有5个数据
            sheet.write(i+1,j,data[j])     #因为第一行写了项目名称,所以内容从i+1行开始写。
    book.save(savezone)       # 保存数据savezone为参数文件名
#数剧保存
save_data_to_namelist()       #将数据保存在namelist中
save_data_to_excel('51job.xls')       # 将namelist的数据写在excel中

到这里就基本全部完成,除了保存在excel里还可以保存到txt里。

最后给出整个代码,但代码中出了一点小问题,由于涉及面广我没及时了解,但不影响。

整个代码

# 导入相关库
import requests
import re
import xlwt
#  获取网站源码
def get_content(page):  # page是要爬去的页码
    #  由于page是数字要想和字符串拼接必须将数字转为字符串,所以使用'+str(page)+'
    url = 'https://search.51job.com/list/200200,000000,0000,00,9,99,%2B,2,'+str(page)+'.html'#  网址拼接
    headers ={  #模拟用户代理
   "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"
    }
    req = requests.get(url,headers=headers) #  开始发送请求数据
    req.encoding = 'gbk'  #网站的编码格式为gbk
    html = req.text  #  将返回的数据保存在html中
    return html
#print(get_content(1))
#  筛选数据

def get(html):
    # 按照正则表达式的原则进行匹配数据
    reg = re.compile(r'class="t1">.*?<a target="_blank" title="(.*?)".*?<span class="t2"><a target="_blank" title="(.*?)".*?<span class="t3">(.*?)</span>.*?<span class="t4">(.*?)</span>.*?<span class="t5"(.*?)</span>.*?',re.S)
    items = re.findall(reg,html) #  将匹配到的数据保存在items里
    return  items
namelist=[]#定义一个空列表用来保存数据

def save_data_to_namelist():    #将数据保存在namelist中
    for i in range(1,30):        #爬取内容
        print('正在爬取第'+str(i)+'的信息...')
        html = get_content(i)
        for j in get(html):
            data = []
            for i in range(0,5):  #每页都有5个数据
                data.append(j[i])
            namelist.append(data)
    return
# 将数据存入Excel表格中。
def save_data_to_excel(savezone):  #新建一个表格
    book = xlwt.Workbook(encoding='utf-8',style_compression=0)
    sheet = book.add_sheet('51job',cell_overwrite_ok=True)
    new_tuple = ('职位','公司','地址','薪资','发布日期')#  新建一个元组(元组元素不可改变)
    for i in range (0,5):
        sheet.write(0,i,new_tuple[i])#  将元组的的数据写入表格的第0行第i列中
    for i in range (0,len(namelist)):
        data = namelist[i]  #将列表中每个数据拿出来
        for j in range(0,5) :#有5个数据
            sheet.write(i+1,j,data[j])
    book.save(savezone)# 保存数据savezone为参数文件名
#数剧保存
save_data_to_namelist()#将数据保存在namelist中
save_data_to_excel('51job.xls')# 将namelist的数据写在excel中

程序运行前
在这里插入图片描述
程序运行后,新增一个表格
在这里插入图片描述
我们打开表格,这就是我们需要的信息内容。
在这里插入图片描述

总结

到目前位置爬虫的基本原理已经差不多了,但需要提高的是正则表达式的匹配
如果正则表达式匹配出问题,那么爬取并保留下来的数据也会出问题。所以也要额外学习正则表达式,这个有利于之后的信息存储。

注:我也是Python初学者并非专业人员,若有漏洞还请指出。关注我和我一起学Python

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值