2014-09-19 45 views
1

嘿傢伙對於我的學校項目,我需要網頁廢料slideshare.net使用python的頁面瀏覽量。然而,它不會讓我刮用戶名的頁面瀏覽量(教授明確告訴我們要刮)例如,如果我去slideshare.net/Username底部會有一個頁面瀏覽計數器,當我進入頁面源代碼是slideshare web廢頁面視圖python

<span class="noWrap"> xxxx views </span> 

當我插入蟒蛇這是

<span class="noWrap"> (.+?) </span> 

什麼也沒有發生我得到的是[]在從放窗口

下面是完整的代碼 -

import urllib 
import re 

symbolfile = open("viewpage.txt") 

symbolslist = symbolfile.read() 

for symbol in symbolslist: 
    print symbol 
htmlfile = urllib.urlopen("http://www.slideshare.net/xxxxxxx") 

htmltext = htmlfile.read() 

regex = ' <span class="noWrap">(.+?)</span>' 
regex_a = '<title>(.+?)</title>' 

pattern = re.compile(regex) 
pattern_a = re.compile(regex_a) 

view = re.findall(pattern,htmltext) 
view_a = re.findall(pattern_a,htmltext) 

print (view, view_a) 
+0

「xxxx views」是什麼意思?什麼'x'? – Kasramvd 2014-09-19 06:44:26

回答

-1

雖然這在技術上不是一個答案,但您需要更改正則表達式。我建議你看看python正則表達式章節。

我會告訴你的是,你的線

regex = ' <span class="noWrap">(.+?)</span>' 

將不會匹配你是基於什麼後網頁上的輸出,因爲有在HTML回車,你的正則表達式不會匹配這些,因此在運行腳本時會出現空列表。

或者你有

htmltext = htmltext.replace("\n","") 
+0

行尾(EOL)標記對於這個正則表達式不是問題。 FWIW,「\ n」== chr(10)是一個換行符;回車是「\ r」== chr(13)。 * nix使用「\ n」作爲EOL; Windows使用「\ r \ n」。我認爲Mac使用「\ r」,或者至少,它曾經用過。 「\ n」是HTML的首選,但瀏覽器可以容忍這兩種EOL樣式。 – 2014-09-19 10:42:27

0

你必須在你的正則表達式字符串的開頭一個空間中運行你的正則表達式之前,你可以刪除回車,所以如果有(至少一個)之前的空間,將只匹配在<span ...

所以不是

regex = ' <span class="noWrap">(.+?)</span>'

嘗試

regex = '<span class="noWrap">(.+?)</span>'

甚至更​​好

regex = r'<span class="noWrap">\s*(.+?)\s*</span>'

原始字符串像r'stuff'是優選的正則表達式使用,所以你沒有逃跑的正則表達式字符串中太多的東西。

\s圖案將消耗空間,因此您無需在findall()捕獲的數據上使用strip()

我還應該提到pattern.findall(text)re.findall(pattern, text)更好一些。