Press "Enter" to skip to content

基于Web的爬虫系统设计与实现

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

摘要:随着信息技术的飞速发展,互联网上的信息数量出现了爆炸式的增长。如何从海量数据中提取并利用有用信息成为一大挑战。网络爬虫的出现有效地解决了这一问题,它可以按照人们设计的规则,凭借计算机的强大处理能力,快速地获取并提炼出有价值的数据.相对于人工获取信息的方式,网络爬虫获取信息的方式具有更高的效率。

 

本文通过Python语言实现一个对Ajax异步加载的网站(智联招聘)的爬虫。通过爬虫程序实现对全国不同岗位的信息批量抓取,具体信息包含:职位名称、薪资、信息更新时间、工作地点等,在进行数据分析。

 

文章首先对Web数据挖掘技术进行概括,分别从数据挖掘技术概念,技术应用优势与技术原理三方面进行论述。其次,重点探讨基于Python基础上的Web数据挖掘技术开发设计方法,对数据挖掘过程中的各类爬虫技术应用优势进行对比,可以作为数据挖掘系统构建过程中的理论参照。

 

关键词: Web;爬虫系统 ;Python ;数据挖掘 ;数据分析

 

Design and implementation of the crawler system based on Web

 

Abstract: With the rapid development of information technology, the number of information on the Internet has shown an explosive growth.How to extract and use useful information from huge amounts of data has become a big challenge.The emergence of network crawler effectively solves this problem, which can quickly obtain and extract valuable data according to the rules designed by people, with the powerful processing ability of computers. Compared with the way of manually acquiring the information, the way of the network crawler obtaining the information is more efficient.

 

This paper implements a crawler asynchronously loaded on the Ajax website (Zhaopin) in the Python language.Through the crawler program, the information of different positions in the country is captured in batches. The specific information includes: job name, salary, information update time, work place, etc., for data analysis.

 

The article first summarizes the Web data mining technology, respectively from the concept of data mining technology, technology application advantages and technical principles.Secondly, focus on the development and design method of Web data mining technology based on Python, and compare the application advantages of various crawler technologies in the process of data mining, which can be used as a theoretical reference in the construction process of data mining system.

 

Key words: Web; crawler system; Python; data mining; data analysis

 

目 录

 

1 绪论 1

 

1.1 选题背景 1

 

1.1.1 课题的国内外的研究现状 1

 

1.1.2 课题研究的必要性 2

 

1.2 课题研究的内容 3

 

2 开发软件平台介绍 4

 

2.1 软件平台 4

 

2.2 开发语言 4

 

2.3 运行环境和系统结构 5

 

3 Web的爬虫系统总体方案 6

 

3.1 系统组成 6

 

3.2 robot协议对本设计的影响 6

 

3.3 爬虫 7

 

3.3.1 工作原理 7

 

3.3.2 工作流程 7

 

3.3.3 抓取策略 7

 

4 模块化设计 9

 

4.1 Tkinter图形界面模块介绍 9

 

4.1.1 图形模块的略解 9

 

4.1.2 图形界面模块与其他模块的交互 10

 

4.2 爬虫模块 12

 

4.2.1 requests库的说明及使用 12

 

4.2.2 bs4库的说明及使用 12

 

4.2.3 json模块的说明及使用 13

 

4.2.4 爬虫模块的流程解析 16

 

4.3 数据分析模块 20

 

4.3.1 matplolib 20

 

4.4 反爬虫模块 22

 

5 结论与发展前景 23

 

5.1 Web的爬虫系统主要实现代码 23

 

5.2 xlsx文件 24

 

参考文献 25

 

致 谢 26

 

4 模块化设计

 

4.1 Tkinter图形界面模块介绍

 

Tkinter是Python的事实上的标准GUI(图形用户界面)包。 它是Tcl / Tk顶部的薄面向对象层。Tkinter不是Python唯一的工具包。 然而,它是最常用的一种。CameronLaird将保留TkInteri的年度决定称为“Python世界的次要传统之一”。

 

4.1.1 图形模块的略解

 

要创建一个图形界面,我们需要首先定义窗口:

 

import tkinter as tk

 

window = tk.Tk()

 

window.title(‘智联招聘爬虫’)

 

window.geometry(‘700X500’)

 

通过以上代码,完成对图形界面窗口的名称命名和大小设置。

 

窗口创建完毕后,进行填充,首先添加背景:

 

canvans = tk.Canvas(window,height=500,width=700)

 

image = canvans.create_image(0,0,anchor=‘nw’,image=tk.PhotoImage(flie=‘爬虫_gif.gif’)

 

canvans.pack()

 

以上代码完成窗口背景设置,分别对背景图像大小和位置进行的设置,被使用的图像名称为’爬虫_gif.gif’。

 

为窗口添加文本框,设置文本框的名称和位置:

 

tk.Label(window,text=“关键字:”).place(x=50,y=150)

 

var_kwords = tk.StringVar()

 

为文本框设置默认值

 

var_kwords.set(‘Python’)

 

本文中运行Web的爬虫系统后会返回显示对应查询目标行业的薪资的平均值、最大值和最小值,通过文本框的默认值显示。

 

本文转载自:http://www.biyezuopin.vip/onews.asp?id=16451

 

#最高工资图
import pandas as pd
from pandas import DataFrame,Series
from matplotlib import pyplot as plt
class data_to_view():
    def __init__(self,xlsx_name):
        self.xl_name = xlsx_name
        self.max_salary()
        self.min_salary()
        self.edu_requirements()
    def max_salary(self):
        max_file_name = self.xl_name
        read_name_max = "%s.xlsx"%max_file_name
        df = pd.read_excel(read_name_max)  # excel
        df['工资'][df['工资'].str.findall('-').str.len() != 1] = '0-0'  # 处理数据,把工资一列变成确定的格式
        low = df['工资'].str.replace('K', '').str.split('-').str[1].astype('float')  # 把工资的列转换成float格式
        df['工资'] = low
        df = df.sort_values(by="工资")  # 根据工资进行排序
        low = df['工资']
        people = df['需求人数'].astype('int')  # 把需求人数一列转换成整型
        fig = plt.figure(figsize=(12, 6))  # 定义画布,大小为(12,6)
        axe = fig.add_subplot(1, 1, 1)  # 添加图标
        plt.rcParams['font.sans-serif'] = ['simhei']  # 显示中文
        x = low.tolist()
        y = people.tolist()
        axe.scatter(x, y, marker='.')
        max_title_name = max_file_name+"最高工资人数需求散点图"
        axe.set_title(max_title_name)  # 标题
        axe.set_xlabel("工 资(单位/千)", fontsize=13)  # x轴标签
        axe.set_ylabel("需 要 人 数", fontsize=13)  # y轴标签
        max_svg_name = max_file_name+"最高工资人数需求散点图.svg"
        plt.savefig(max_svg_name)  # 保存
    def min_salary(self):
        min_file_name = self.xl_name
        read_name_min = "%s.xlsx"%min_file_name
        df = pd.read_excel(read_name_min)  # excel
        df['工资'][df['工资'].str.findall('-').str.len() != 1] = '0-0'  # 处理数据,把工资一列变成确定的格式
        low = df['工资'].str.replace('K', '').str.split('-').str[0].astype('float')  # 把工资的列转换成float格式
        df['工资'] = low
        df = df.sort_values(by="工资")  # 根据工资进行排序
        low = df['工资']
        people = df['需求人数'].astype('int')  # 把需求人数一列转换成整型
        fig = plt.figure(figsize=(12, 6))  # 定义画布,大小为(12,6)
        axe = fig.add_subplot(1, 1, 1)  # 添加图标
        plt.rcParams['font.sans-serif'] = ['simhei']  # 显示中文
        x = low.tolist()
        y = people.tolist()
        axe.scatter(x, y, marker='.')
        min_title_name =min_file_name + "最低工资人数需求散点图"
        axe.set_title(min_title_name)  # 标题
        axe.set_xlabel("工 资(单位/千)", fontsize=13)  # x轴标签
        axe.set_ylabel("需 要 人 数", fontsize=13)  # y轴标签
        min_svg_name = min_file_name+'最低工资人数需求散点图.svg'
        plt.savefig(min_svg_name)  # 保存
    def edu_requirements(self):
        cyl_file_name = self.xl_name
        read_name_cyl = "%s.xlsx"%cyl_file_name
        df = pd.read_excel(read_name_cyl)  # excel
        names = df['学历'].value_counts().index.tolist()  # 学历
        x = range(len(names))  # 定义一个列表,用作X轴的位置
        y = df['学历'].value_counts().tolist()  # y轴数据
        plt.rcParams['font.sans-serif'] = ['simhei']  # 显示中文的设置
        fig = plt.figure(figsize=(12, 6))  # 定义一个画布
        axe = fig.add_subplot(1, 1, 1)  # 添加图表
        axe.bar(x, y, tick_label=names)  # 绘制柱状图
        for i in range(len(names)):
            axe.text(x[i] - 0.15, y[i] + 2, y[i])  # 显示柱状图柱子上的数字
        cyl_title_name = read_name_cyl +"学历要求柱状图"
        axe.set_title(cyl_title_name)  # 添加标题
        cyl_svg_name = read_name_cyl +'学历要求柱状图.svg'
        plt.savefig(cyl_svg_name)  # 保存
if __name__ == '__mian__':
    data_to_view()

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。