本地爬虫测试

爬虫小测试

相信大家应该都有听说过爬虫吧,但到底什么是爬虫呢?
这里我简单的套用一下百度词条的结果:

   网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追
逐者)是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使
用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

其中爬虫程序

   Spider又叫WebCrawler或者Robot,是一个沿着链接漫游Web 文档集合的程序。
它一般驻留在服务器上,通过给定的一些URL,利用HTTP等标准协议读取相应文档,
然后以文档中包括的所有未访问过的URL作为新的起点,继续进行漫游,直到没有
满足条件的新URL为止。WebCrawler的主要功能是自动从Internet上的各Web 站点
抓取Web文档并从该Web文档中提取一些信息来描述该Web文档,为搜索引擎站点
的数据库服务器追加和更新数据提供原始数据,这些数据包括标题、长度、文件建
立时间、HTML文件中的各种链接数目等

说的这么专业,初次看我也不知道是在讲什么
下面说一下我自己的理解:

爬虫程序是一组客户端程序,他的功能是访问web服务器,从服务器中获取网页代码,
网页代码当中包含了许多各种各样的数据信息,程序从中提取我们所关心的数据或是
对我们自己有用的数据,然后通过爬虫程序代码的功能函数实现数据整理并存储在本
地的数据库当中。说的简单点就是偷偷从网页当中获取我们想要的东西

这东西说起来简单,但是困难的是我们往往在一个网页当中难以拼凑出我们想要
的完整数据格式,所以我们通常需要从多个不同的网站当中进行数据抓取并且高效
率的整理数据这才是难点,说这么多理论的,感觉没什么用处,下面我们简单的感受
一下爬虫

 from urllib import request
if __name__ == "__main__":
    url = "https://wenku.baidu.com/view/7b93d6c251e79b8969022645.html"
    head = { }
    head['User-Agent']='Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'  
    req = request.Request(url, headers = head)
    response = request.urlopen(req)
    html = response.read().decode(' GBK')
    print(html)

效果图:在这里插入图片描述下面是这个网页的源代码
在这里插入图片描述
简单看一下我们就会发现我们成功的获取了网页的源代码,其中具体的User-Agent这个有啥要用
简单的说就是有些网站不允许我们直接爬取,我们得隐藏一下自己爬虫的身份,所以用了一个伪
装代理,具体的我们以后有时间再仔细讲解
今天我们要说的不是这个,今天我们先学习一下这么用自己的计算机作为服务器,爬取自己服务器上的数据

首先

我们做一下简单的预备工作
在自己的编译器(我用的编译器是pycharm)当中下载好一些库flask,re,os,rullib

然后建立一个txt文件存一点东西并存好
在这里插入图片描述
下面使用这个文件的数据建立服务器

from flask import Flask,request
import os

app = Flask(__name__)
@app.route("/")
def show():
    if os.path.exists("students.txt"):
        st = "<table border='1'width='300'>"
        fobj = open("students.txt", "rt", encoding="GBK")
        while True:
            s = fobj.readline().strip("\n")
            if s == "":
                break
            s = s.split(",")
            st = st + "<tr>"
            for i in range(len(s)):
                st = st + "<td>"+s[i] + "</td>"
            st = st + "</tr>"
        fobj.close()
        st = st + "</table>"
        return st
if __name__ == "__main__":
    app.run()

我们简单的看一下运行的结果
在这里插入图片描述
说明我们建站成功,然后进入127.0.0.1:5000这个地址看一下显示的结果
在这里插入图片描述
然后我们开始准备爬取网页信息的工作
第一步分析网页结构
在这里插入图片描述
不难发现这个页面由四个tr标签构成,然后每个tr里面都有四个td标签,然后准备爬取
第一步正则表达的使用
去匹配我们想要的结果并输出,假如我们只想要tr里面的数据我们可以这样写

py r"<tr>.*?</tr>"这样的话我们就能得到每个tr标签里面的数据
关于正则表达式的学习,大家可以去看看菜鸟教程-正则表达式语法
所以代码的全部就是

import  urllib.request
import re

try:
    resp = urllib.request.urlopen("http://127.0.0.1:5000")
    data = resp.read()
    html = data.decode()
    trs = re.findall(r"<tr>.*?</tr>", html)
    for i in trs:
        tds = re.findall(r"<td>(.*?)</td>", i)
        for j in tds:
            print(j, " ", end='')
        print()
except Exception as err:
    print(err)

代码运行效果如下

我们发现有点小小的瑕疵就是输出格式不好看,并没有对齐,所以简单的进行一波输出
格式的修改

 print(j, " ", end='')替换为print("%-4s"%j, " ", end='')

然后输出结果就变成了这样

其中"%-4s"%的含义是向左靠齐然后并每个字符串只占4个位置这样的话就对齐了,其他更多的
格式控制大家自行百度吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值