學習目標:
1.檢索網頁
2.建立索引
3.對網頁進行搜尋
4.以多種不同方式對搜尋的結果進行排名
搜尋引擎的組成
建立搜尋引擎的首要步驟是找到一種蒐集文件的方法,之後需要為這些文件建立索引。
通常要建立一張大表,表中包含了文件及所有不同的單詞的位置資訊。文件本身不需要儲存在資料庫中,索引資訊只需簡單的儲存乙個指向文件所在的位置的引用即可,最後一步是通過查詢返回乙個經過排序的文件列表。
此處的奧妙是對結果的排列方式
下面將介紹幾種基於網頁內容的度量方法,比如單詞頻度,然後再介紹幾種基於網頁外部資訊的度量方法,如pagerank演算法,pagerank方法會考察其他網頁對當前網頁的引用情況
在最後,將建立乙個神經網路,用以對查詢結果進行排名。通過了解人們在得到搜尋結果以後都點選了哪些鏈結,神經網路會將搜尋結果和過程關聯起來。它會利用這一資訊來改變搜尋結果的排列順序
,以更好地反映人們過去的點選情況。
接下來會建立兩個類,乙個用於檢索網頁和建立資料庫,另乙個通過查詢資料庫進行全文
搜尋。
importurllib.request as url
from bs4 import
beautifulsoup
#from urlparse import urljoin
#thon3中將urlparse併入urllib
#構造乙個單詞列表,這些單詞將被忽略
ignorewords=['
the','
of','
to','
and','
a','
in','
is','
it']
importurllib.request as url
class
crawler:
#初始化crawler類並傳入資料庫名稱
def__init__
(self,dbname):
pass
def__del__
(self):
pass
defdbcommit(self):
pass
#輔助函式,用於獲取條目的id,並且如果條目不存在,就將其加入資料庫中
def getentryid(self,table,field,value,createnew=true):
return
none
#為每個網頁建立索引
defaddtoindex(self,url,soup):
print('
indexing %s
' %url)
#從乙個html網頁中提取文字(不帶標籤的)
defgetnextonly(self,soup):
return
none
#根據任何非空白字元進行分詞處理
defseperatewords(self,text):
return
none
#r如果url已經建過索引,則返回true
defisindexed(self,url):
return
false
#新增乙個關聯兩個王爺的鏈結
defaddlinkref(self,urlfrom,urlto,linktext):
pass
#從一小組網頁開始進行廣度優先搜尋,直至某一給定深度
#期間為網頁建立索引
def crawl(self,pages,depth=2):
for i in
range(depth):
newpages=set()
for page in
pages:
try:
c=url.urlopen(page)
(c)
except
:
print("
cloud not open %s
" %page)
continue
soup=beautifulsoup(c.read())
self.addtoindex(page,soup)
links=soup('a'
)
for link in
links:
if('
href'in
dict(link,attrs)):
url=urljoin(page,link['
href'])
if url.find("
'") !=-1:continue
url=url.split('
#')[0] #
去掉位置部分
#建立資料庫表
defcreateindextables(self):
pass
第四章 程式設計
選擇語言的原則 最少的工作量原則 最少技巧性原則 最少錯誤原則 最少維護原則 減少記憶原則 總原則 先求正確後求快 先求清晰後求快 求快不忘保持程式正確性 保持程式整潔以求快 不要因效率而犧牲清晰 好程式標準 易於測試和除錯 易於維護 易於修改 設計簡單 高效率結構化程式設計主要包括兩方面 在編寫程...
第四章高階查詢
案例1 檢查 oop 課程最近一次考試。如果有80分以上的成績,則每人提2分 否則,每人提5分。最終的成績不得大於100分 if exists select studentresult from result where subjectid select subjectid from subject...
第四章 多表查詢
例如 按照department id查詢employee 員工表 和department 部門表 的資訊。方法一 通用型 select from where select e.last name,e.department id,d.department name from employee e,de...