slideshare web scrape页面视图python

时间:2014-09-19 06:38:34

标签: java python html

嘿伙计对于我的学校项目,我需要使用python网页废弃slideshare.net进行页面浏览。但是,它不会让我刮掉用户名的页面浏览量(教授专门告诉我们刮去),例如,如果我去底部的slideshare.net/Username,当我进入页面时会有一个页面查看计数器源代码是

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

当我将其插入到python中时

 <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)

2 个答案:

答案 0 :(得分:0)

你的正则表达式字符串的开头有一个空格,所以它只会匹配<span之前的一个空格(至少)...

所以而不是

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

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

甚至更好

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

r'stuff'这样的原始字符串是正则表达式使用的首选,因此您不必在正则表达式字符串中包含太多内容。

\s模式会消耗空格,因此您不必对使用strip()捕获的数据使用findall()

我还应该提到pattern.findall(text)语法比re.findall(pattern, text)更好。

答案 1 :(得分:-1)

虽然这不是技术上的答案,但您需要更改正则表达式。我建议你看一下python正则表达式章节。

我会告诉你的是你的行

regex = ' <span class="noWrap">(.+?)</span>'
基于网页的输出,

将与您所追求的不匹配,因为html中有回车符,并且您的正则表达式与这些不匹配,因此在运行脚本时为空列表。

或者您可以在使用

运行正则表达式之前删除回车符
htmltext = htmltext.replace("\n","")