請參閱GitHub上的代碼
您需要在各個站點周圍旅行,並且請求將很可能無法推斷角色代碼,因此您需要在Linux環境中安裝nkf 。
$ sudo apt install nkf
$ which nkf
/usr/bin/nkf我也包括mecab
$ sudo apt install mecab libmecab-dev mecab-ipadic
$ sudo apt install mecab-ipadic-utf8
$ sudo apt install python-mecab
$ pip3 install mecab-python3
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ ./bin/install-mecab-ipadic-neologd -n
安裝剩餘的依賴項
$ pip3 install -r requirements.txt 基本上,您可以通過按照ubuntu等Linux上的順序運行github代碼來重現github代碼。
如果您想嘗試爬網(刮刀),您將無限地獲得,因此我們假設您可以決定種子並在適當的時間完成。
A.爬行
B.用標題,描述,身體和HREF對爬行的HTML解析以格式化數據
C.創建IDF詞典
D.創建TFIDF數據
F.創建轉置URL和HREFS的對應關係(簡單引用的特徵量)
G.計算非參考號碼並為Pagerank創建培訓數據
H.為URL和TFIDF權重創建一個轉置索引
I.在Hashed URL和實際URL之間創建對應表
J.學習Pagerank
K.搜索接口

無論特定領域如何,我們都會全面爬網。 我們將我們的博客網站用作種子,並隨著限制我們的領域而進行更深入的發展。
它爬行了各種站點,但非常重,因此我將自己的分散KVS作為我的後端數據庫。文件容易使用sqllite損壞,而LevelDB只能是單個訪問權限。

A中獲得的數據太大,因此B中的過程提取了TFIDF,“標題”,“描述”和“身體”中搜索的主要特徵。
它還解析了頁面所指的所有外部URL。
soup = BeautifulSoup ( html , features = 'lxml' )
for script in soup ([ 'script' , 'style' ]):
script . decompose ()
title = soup . title . text
description = soup . find ( 'head' ). find (
'meta' , { 'name' : 'description' })
if description is None :
description = ''
else :
description = description . get ( 'content' )
body = soup . find ( 'body' ). get_text ()
body = re . sub ( ' n ' , ' ' , body )
body = re . sub ( r's{1,}' , ' ' , body )它可以很容易地使用美麗的小組處理。
為了降低經常出現的單詞的重要性,請計算每個單詞的記錄。
使用B和C的數據將其作為TFIDF完成
每個title description body的重要性不同, title : description : body = 1 : 1 : 0.001
它被視為。
# title desc weight = 1
text = arow . title + arow . description
text = sanitize ( text )
for term in m . parse ( text ). strip (). split ():
if term_freq . get ( term ) is None :
term_freq [ term ] = 0
term_freq [ term ] += 1
# title body = 0.001
text = arow . body
text = sanitize ( text )
for term in m . parse ( text ). strip (). split ():
if term_freq . get ( term ) is None :
term_freq [ term ] = 0
term_freq [ term ] += 0.001 # ここのweightを 0.001 のように小さい値を設定する我知道過去很普遍,可以通過從各個地方提供URL鏈接來SEO,因此我這樣做是為了知道要提及多少外部參考。
基於F中創建的數據,您可以使用名為NetworkX的庫學習Pagerank節點的權重,因此您可以創建培訓數據。
需要將這樣一個數據集作為輸入(右哈希是鏈接源,左哈希是鏈接目標))
d2a88da0ca550a8b 37a3d49657247e61
d2a88da0ca550a8b 6552c5a8ff9b2470
d2a88da0ca550a8b 3bf8e875fc951502
d2a88da0ca550a8b 935b17a90f5fb652
7996001a6e079a31 aabef32c9c8c4c13
d2a88da0ca550a8b e710f0bdab0ac500
d2a88da0ca550a8b a4bcfc4597f138c7
4cd5e7e2c81108be 7de6859b50d1eed2
refnum(被参照数)容納最簡單的單詞,我們創建一個索引weight(tfidf)使您可以從單詞中搜索URLのハッシュ。
0010c40c7ed2c240 0.000029752 4
000ca0244339eb34 0.000029773 0
0017a9b7d83f5d24 0.000029763 0
00163826057db7c3 0.000029773 0
如果您將URL保持在內存中,它將溢出,因此,通過使用SHA256將其視為僅使用前16個字符的小哈希值,您就可以搜索具有最少實際使用的文檔,即使是100萬個訂單的文檔。
了解在G中創建的數據,並學習URL中的Pagerank值。
使用NetworkX,您可以使用非常簡單的代碼學習。
import networkx as nx
import json
G = nx.read_edgelist('tmp/to_pagerank.txt', nodetype=str)
# ノード数とエッジ数を出力
print(nx.number_of_nodes(G))
print(nx.number_of_edges(G))
print('start calc pagerank')
pagerank = nx.pagerank(G)
print('finish calc pagerank')
json.dump(pagerank, fp=open('tmp/pagerank.json', 'w'), indent=2)
提供搜索,如果
$ python3 K001_search_query.py
(ここで検索クエリを入力)例子
$ python3 K001_search_query.py
ふわふわ
hurl weight refnum weight_norm url pagerank weight*refnum_score+pagerank
9276 36b736bccbbb95f2 0.000049 1 1.000000 https://bookwalker.jp/dea270c399-d1c5-470e-98bd-af9ba8d8464a/ 0.000146 1.009695
2783 108a6facdef1cf64 0.000037 0 0.758035 http://blog.livedoor.jp/usausa_life/archives/79482577.html 1.000000 0.995498
32712 c3ed3d4afd05fc43 0.000045 1 0.931093 https://item.fril.jp/bc7ae485a59de01d6ad428ee19671dfa 0.000038 0.940083
... 當我搜索“ rai-chan”時,我能夠調整它,以便大致上是我想要的信息。
Pixiv並未明確設置為爬行目的地,但由於A的爬行者遵循鏈接並創建索引,因此自動獲取它。

其他查詢,例如“ Shokuro”,也返回了我想要的結果。

手工嘗試各種事情后,我發現這是最佳分數。 (我是正確的數據)
