搜索引擎优化毕业论文(如何使用python写一个搜索引擎实现PS(组图) )

优采云 发布时间: 2022-02-24 08:18

  搜索引擎优化毕业论文(如何使用python写一个搜索引擎实现PS(组图)

)

  前言

  随着互联网和宽带上网的普及,搜索引擎在中国如雨后春笋般涌现,越来越深入到人们的日常生活中。在互联网普及之前,人们在寻找资料时首先想到的就是拥有大量书籍的图书馆。但今天很多人会选择一种更方便、快捷、全面、准确的查询方式——互联网。帮助我们在整个互联网上快速找到目标信息的,是越来越受到关注的搜索引擎。

  今天前辈就给大家介绍一下如何用python写一个搜索引擎。这个项目经常用于毕业设计。

  1.实现

  PS:如需Python学习资料,可点击下方链接自行获取

  Python免费学习资料及*敏*感*词*流答案点击加入

  1.1 系统架构

  搜索引擎有五个基本模块,分别是:

  本设计研究是如何在信息处理和分析的基础上构建一个完整的中文搜索引擎。

  因此,该系统主要由以下详细部分组成:

  1.2 爬取大量网络数据

  爬取数据,其实就是使用爬虫。

  我们平时浏览网页的时候,在浏览器中输入一个网址,然后回车,我们会看到一些网站的页面,那么这个过程其实就是浏览器请求一些服务器,然后获取一些网页资源服务器,然后我们看到这个网页。

  请求就是用程序实现上述过程,需要编写代码模拟浏览器向服务器发起请求,然后获取这些网页资源。一般来说,实际获得的这些网页资源都是一串HTML代码,其中收录HTML标签和一些在浏览器中看到的文本。然后我们要提取的一些数据收录在这些 HTML 文本中。接下来我们需要做的就是从这些文本中提取一些我们想要的信息(比如一段话、一个手机号、一段文字等),这就是我们提取的一个过程。提取后,我们将提取的信息存储在数据库、文本等中,这就是完成一个数据采集的过程。

  我们写好程序后,让它一直运行,它可以向服务器发送请求而不是我们的浏览器,然后不断循环运行,批量获取大量数据,这是爬虫的一个基本特性. 过程。

  一个通用网络爬虫的框架如图所示:

  

  这是一个爬虫,它爬取 网站 和您感兴趣的内容,并以固定格式保存:

  

# encoding=utf-8

# 导入爬虫包

from selenium import webdriver

# 睡眠时间

import time

import re

import os

import requests

# 打开编码方式utf-8打开

# 睡眠时间 传入int为休息时间,页面加载和网速的原因 需要给网页加载页面元素的时间

def s(int):

time.sleep(int)

# html/body/div[1]/table/tbody/tr[2]/td[1]/input

# http://dmfy.emindsoft.com.cn/common/toDoubleexamp.do

if __name__ == '__main__':

#查询的文件位置

# fR = open('D:\\test.txt','r',encoding = 'utf-8')

# 模拟浏览器,使用谷歌浏览器,将chromedriver.exe复制到谷歌浏览器的文件夹内

chromedriver = r"C:\\Users\\zhaofahu\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe"

# 设置浏览器

os.environ["webdriver.chrome.driver"] = chromedriver

browser = webdriver.Chrome(chromedriver)

# 最大化窗口 用不用都行

browser.maximize_window()

# header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}

# 要爬取的网页

neirongs = [] # 网页内容

response = [] # 网页数据

travel_urls = []

urls = []

titles = []

writefile = open("docs.txt", 'w', encoding='UTF-8')

url = 'http://travel.yunnan.cn/yjgl/index.shtml'

# 第一页

browser.get(url)

response.append(browser.page_source)

# 休息时间

s(3)

# 第二页的网页数据

#browser.find_element_by_xpath('// *[ @ id = "downpage"]').click()

#s(3)

#response.append(browser.page_source)

#s(3)

# 第三页的网页数据

#browser.find_element_by_xpath('// *[ @ id = "downpage"]').click()

#s(3)

#response.append(browser.page_source)

# 3.用正则表达式来删选数据

reg = r'href="(//travel.yunnan.cn/system.*?)"'

# 从数据里爬取data。。。

# 。travel_urls 旅游信息网址

for i in range(len(response)):

travel_urls = re.findall(reg, response[i])

# 打印出来放在一个列表里

for i in range(len(travel_urls)):

url1 = 'http:' + travel_urls[i]

urls.append(url1)

browser.get(url1)

content = browser.find_element_by_xpath('/html/body/div[7]/div[1]/div[3]').text

# 获取标题作为文件名

b = browser.page_source

travel_name = browser.find_element_by_xpath('//*[@id="layer213"]').text

titles.append(travel_name)

print(titles)

print(urls)

for j in range(len(titles)):

writefile.write(str(j) + '\t\t' + titles[j] + '\t\t' + str(urls[j])+'\n')

s(1)

browser.close()

  1.3 中文分词

  中文分词可以使用jieba库

  jieba 是一个基于 Python 的中文分词工具。对于一段长文本,其分词原理大致可以分为三个步骤:

  1.首先,使用正则表达式将中文段落大致分为句子。

  2.将每个句子构造成一个有向无环图,然后找到最佳的切分方案。

  3.最后,对于连续的单词,再次使用HMM模型进行划分。

  jieba分词分为“默认模式”(cut_all=False)、“全模式”(cut_all=True)和搜索引擎模式。对于“默认模式”,也可以选择是否使用HMM模型(HMM=True, HMM=False)。

  1.4 相关度排名

  上面已经根据用户的输入得到了相关的URL数据。

  得到的数据中行的形式如下

  [(urlid1,wordlocation1_1,wordlocation1_2,wordlocation1_3…),(urlid2,wordlocation2_1,wordlocation2_2,wordlocation2_3…)]

  列表的每个元素都是一个元组,每个元素的内容是该文档中每个 关键词 的 urlid 和位置。

  wordids的形式为[wordid1, wordid2, wordid3…],即每个关键词对应的词id

  我们将介绍几种排名算法,所谓排名就是对每个环节按照自己的规则进行打分,得分越高。最后,我们将结合几种排名算法给出最终排名。既然要全面使用,就要先实现各个算法。综合利用中会遇到几个问题。

  1、每个排名算法都有不同的评分机制,给出的评分尺度和含义也不同

  2、如何综合使用要考虑各个算法的效果。对好的结果给予更大的重视。

  我们首先考虑第一个问题,如何消除各个评分算法给出的不同评分尺度和含义的问题。

  研究完所有算法后,再考虑第二个问题。

  很简单,使用归一化将每个评分值按 0-1 比例缩放,1 表示最高,0 表示最低。

  对爬取的数据进行排序的排序算法有以下几种:

  第一种排名算法:基于词位置评分的函数

  我们可以认为,对于用户输入的多个关键词,在文档中,这些关键词出现的越早越好。比如我们经常习惯在文章前面加上一些抽象的、笼统的描述。

<p> # 根据单词位置进行评分的函数.

# rows是[(urlid1,wordlocation1_1,wordlocation1_2,wordlocation1_3...),(urlid2,wordlocation2_1,wordlocation2_2,wordlocation2_3...)]

def locationscore(self,rows):

locations=dict([(row[0],1000000) for row in rows])

for row in rows:

loc=sum(row[1:]) #计算每个链接的单词位置总和,越小说明越靠前

if loc

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线