嘿伙计对于我的学校项目,我需要使用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)
答案 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","")