爬虫——本地页面

1、爬取网页

本地一共5个页面,故此循环五次获取页面信息,使用BeautifulSoup获取web页面,使用正则表达式获取页面所需信息,通过查看web标签获取数据位置,在爬取数据。把获取的一个页面的所以数据保存至data数组中。当一个页面数据获取完成,在把数据放至datalist中。返回datalist

for i in range(0, 5):  # 调用获取页面信息的函数,5次
    num = i + 1
    file = open("G:/爬虫/网页内容爬取/start=" + str(num) + ".html", "rb")
​
    html = file.read().decode("utf-8")  # file为str格式故此str(num)
    bs = BeautifulSoup(html, "html.parser")
    data = []  # 保存一个页面的所有信息
    # 分类
    for item in bs.find_all('span', id="catenavi"):
    item = str(item)
    catenavi = re.compile(r'<a .*?>(.*?)</a>')
    cate = re.findall(catenavi, item)[0]
    data.append(cate)
    # 名称
    for item in bs.find_all('div', class_="title_thema"):
    item = str(item)
    doctitle = re.compile(r'<h1 id="doctitle">(.*)</h1>')
    title = re.findall(doctitle, item)[0]
    data.append(title)
    # 编辑者,浏览次数,编辑次数,更新时间
    for item in bs.find_all('div', class_="columns ctxx"):
    item = str(item)
    # print(item)
    # 编辑者
    name = re.compile(r'<dt><a .*? target="_blank">(.*)</a> <em class="f12"><img .*? .*?/> .*?</em></dt>')
    n = re.findall(name, item)
    data.append(n)
    # 浏览次数
    view = re.compile((r'<li><span class="gray">浏览次数:</span>(\d*) 次</li>'))
    v = re.findall(view, item)[0]
    data.append(v)
    # 编辑次数
    editor = re.compile(
    (r'<li><span class="gray">编辑次数:</span>(\d*)次 <a class="clink" .*? target="_blank">历史版本</a></li>'))
    e = re.findall(editor, item)[0]
    data.append(e)
    # 更新时间
    time = re.compile((r'<li><span class="gray">更新时间:</span>(.*)</li>'))
    t = re.findall(time, item)[0]
    data.append(t)
    datalist.append(data)

2、存储数据

数据存储至爬虫,xls表中,先创建workbook对象,在创建工作表, 如果对一个单元格重复操作,会引发error。所以在打开时加cell_overwrite_ok=True解决 ,输入列名col = ("分类", "名称", "编辑者", "浏览次数", "编辑次数", "更新日期")在通过循环把数据写入xls表格中,因为同一个名称的信息可能有多个编辑者信息,故此在编辑者写入表格中先判断编辑者人数大于等于2,就在前面的名字后面加“,”。数据保存至savepath中

book = xlwt.Workbook(encoding="utf-8", style_compression=0)  # 创建workbook,对象style_compression:表示是否压缩
    sheet = book.add_sheet('爬虫', cell_overwrite_ok=True)  # 创建工作表
    col = ("分类", "名称", "编辑者", "浏览次数", "编辑次数", "更新日期")
    for i in range(6):
        sheet.write(0, i, col[i])  # 列名
    for i in range(0, 5):
        print("第%d条" % (i + 1))
        data = datalist[i]
        # 编辑者不只一个人,使每个人分开
        l = len(data[2])
        while l >= 2:
            l = l - 2
            data[2][l] = data[2][l-2] + ','
        for j in range(6):
            sheet.write(i + 1, j, data[j])  # 数据
    book.save(savepath)  # 保存

3、全部代码

# -*- coding:utf-8 -*- 
​
from bs4 import BeautifulSoup
import re    #正则表达式
import xlwt   #进行excel操作
​
def main():
    file = open("G:/爬虫/网页内容爬取/start=1.html", "rb")
    datalist = getData(file)
    savepath = "爬虫.xls"
    saveData(datalist, savepath)
​
# 爬取网页
def getData(file):
    datalist = []
​
    for i in range(0, 5):  # 调用获取页面信息的函数,5次
        num = i + 1
        file = open("G:/爬虫/网页内容爬取/start=" + str(num) + ".html", "rb")
​
        html = file.read().decode("utf-8")  # file为str格式故此str(num)
        bs = BeautifulSoup(html, "html.parser")
        data = []  # 保存一个页面的所有信息
        # 分类
        for item in bs.find_all('span', id="catenavi"):
            item = str(item)
            catenavi = re.compile(r'<a .*?>(.*?)</a>')
            cate = re.findall(catenavi, item)[0]
            data.append(cate)
        # 名称
        for item in bs.find_all('div', class_="title_thema"):
            item = str(item)
            doctitle = re.compile(r'<h1 id="doctitle">(.*)</h1>')
            title = re.findall(doctitle, item)[0]
            data.append(title)
        # 编辑者,浏览次数,编辑次数,更新时间
        for item in bs.find_all('div', class_="columns ctxx"):
            item = str(item)
            # print(item)
            # 编辑者
            name = re.compile(r'<dt><a .*? target="_blank">(.*)</a> <em class="f12"><img .*? .*?/> .*?</em></dt>')
            n = re.findall(name, item)
            data.append(n)
            # 浏览次数
            view = re.compile((r'<li><span class="gray">浏览次数:</span>(\d*) 次</li>'))
            v = re.findall(view, item)[0]
            data.append(v)
            # 编辑次数
            editor = re.compile(
                (r'<li><span class="gray">编辑次数:</span>(\d*)次 <a class="clink" .*? target="_blank">历史版本</a></li>'))
            e = re.findall(editor, item)[0]
            data.append(e)
            # 更新时间
            time = re.compile((r'<li><span class="gray">更新时间:</span>(.*)</li>'))
            t = re.findall(time, item)[0]
            data.append(t)
            datalist.append(data)
​
    return datalist
​
# 存储数据
def saveData(datalist, savepath):
    book = xlwt.Workbook(encoding="utf-8", style_compression=0)  # 创建workbook,对象style_compression:表示是否压缩
    sheet = book.add_sheet('爬虫', cell_overwrite_ok=True)  # 创建工作表
    col = ("分类", "名称", "编辑者", "浏览次数", "编辑次数", "更新日期")
    for i in range(6):
        sheet.write(0, i, col[i])  # 列名
    for i in range(0, 5):
        print("第%d条" % (i + 1))
        data = datalist[i]
        # 编辑者不只一个人,使每个人分开
        l = len(data[2])
        while l >= 2:
            l = l - 2
            data[2][l] = data[2][l-2] + ','
        for j in range(6):
            sheet.write(i + 1, j, data[j])  # 数据
    book.save(savepath)  # 保存
​
if __name__ == '__main__':
    # 调用函数
    main()
    print("爬取完毕!")
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值