为什么正则把源代码采集下来就能匹配到但是直接用网页就不行

zhxzd1 2018-01-28 05:39:32
r=' <p class="productPrice"><em title="188.00"><b>¥</b>188.00</em></p>'
price=re.findall(r'<em.*?>(.*?)</em>',r)
print price

这样输出的时候输出的结果是
['<b>¥</b>188.00']


而上述被我复制到文本的源代码在原来的网页源代码中显示是
 <p class="productPrice">
<a class="tag"><img src="//img.alicdn.com/tfs/TB1hszmmv2H8KJjy0FcXXaDlFXa-60-60.png" title="" /></a>

<em title="188.00"><b>¥</b>188.00</em>

</p>

我的python代码是
r=requests.get(url,timeout=30)
price=re.findall(r'<em.*?>(.*?)</em>',r.text,re.S)
print price

这时候输出为空

想不明白为什么,向各位大佬求教...
第一次发帖,如有不合规范还望海涵并告知!
...全文
367 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanGuo_uu 2018-01-29
  • 打赏
  • 举报
回复
你把r.text先打印出来看看。 如果跟你直接的html不同,那就找到原因了
lzw2016 2018-01-29
  • 打赏
  • 举报
回复
不好意思没看到你在findall中写了r.text,但不是正则匹配的原因,把r.text打印出来看看吧,因为有些内容会通过异步加载,并非是在html中显示
lzw2016 2018-01-29
  • 打赏
  • 举报
回复
正则是做字符串匹配,你返回的源码要使用text属性得到字符串
「已注销」 2018-01-28
  • 打赏
  • 举报
回复

result=re.findall(r'<em .*?</b>(.*?)</em>',s,re.DOTALL)
print(result[0])
正则测试工具简介 正则测试工具顾名思义是用于正则表达式测试的工具,当然也可以做为日常一般数据处理工具,对正则数量的话这个工具可以给你带来极大的便利。有时我们经常需要对html页面源代码进行数据过滤分析,所以工具提供了直接采集html的功能。输入网址,然后点击后面的按钮采集得到html。接着就在下面输入正则表达式,点击下面按钮处理检索结果。 正则表达式学习请打开文件夹里的“Microsoft Windows 脚本技术.chm”,依次展开树“Windows 脚本技术 - VBScript - 正则表达式简介”,认真学习吧,需要耐心和不停的试验,学好了绝对是一把利器。我以前学习都要写vb代码来测试,现在大家可以直接使用这个软件来测试了。不过建议还是多写写代码代码有好处没坏处,加深印象。 界面上所有按钮对应的功能: 【下载代码】下载前面url的页面源代码,可在设置里设置采集页面代码的Charset模式 【完全匹配】测试字符串是否和内容匹配,对应正则对象的test方法,返回True或者False 【检索结果】对表达式开始处理,输出所有匹配项目。默认是整个匹配结果和括号捕获匹配的子项都显示,要调整内容可以在“设置”里处理 【全部替换】就是正则表达式替换,对应正则对象的replace方法,比如将上面匹配的内容换成特定的字符,支持$1这样的捕获。 【设置】程序的一些参数都可以在这里设置。比如设置采集网页是否按utf8模式,显示结果是否只显示括号捕获内容,已经设置界面语言等。 特殊功能: 1.左键快速三击窗体空白处可以生成vb代码 2.双击网址处会变成红色,生成的代码会包含下载改网址的函数 3.双击替换按钮后的输入框会变成红色,生成的代码会包含正则替换的代码 4.点击网址、表达式、替换表达式输入框后的箭头会显示所有历史使用的网址或表达式 5.在数据处理区双击会显示出一个对话框,勾选删除回车或制表符,鼠标移开后生效 6.有时需要用到多次正则替换,那么可以一次写多个表达式,表达式之间用>NEXT>隔开 7.按快捷键CTRL+F可以调出搜索框,输入内容后按搜索按钮相关内容会被标记为红色 8.按快捷键CTRL+R可以调出常用正则库。双击选择表达式会自动填入到软件上 您自己可以打开软件旁边的reg.txt进行自行扩充或修改。注意格式,说明文字和后面必须用制表 符来隔开。如果是替换表达式,会涉及到表达式和替换后的内容,请用~~间隔开来。 针对上面的第6条专门举个多次过滤html代码的例子: 网 址:http://www.kujiang.com/read/book/2579/76288 表达式:<script.*?>[\s\S]*?[\s\S]*?|<[^>]*?>|&[a-z]*?;>NEXT>[ \t]+>NEXT>([\r\n] ?)+ 替换表达式:>NEXT> >NEXT>\r\n 点击按钮“全部替换为”,你会得到很纯净的文字。 下面再提供一个采集双色球开奖号的范例: 网 址:http://datachart.500.com/ssq/history/history.shtml 表达式:(\d{5})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d) 点击按钮“检索结果”,如果要结果好看点就在设置里把主匹配和行号显示都设为False sysdzw QQ: 171977759 邮箱: sysdzw@163.com http://hi.baidu.com/sysdzw 1:26 2011-01-18
正则巅峰一个超强字符串处理工具,之所以取名叫“正则巅峰”,是因为它主要就是靠正则,将正则真正融入,无须依赖什么开发工具或者某个语言即可直接使用正则处理你手头文本数据相关的事务,真正将正则应用达到了一个巅峰。 它最擅长的就是字符串处理,文本处理,可以直接在命令提示符下调用,同样在你的程序的中也可以调用。使用非常方便。 如果你比较熟悉正则,那么你会发现正则巅峰(Regtop)会给你在日常工作中带来极大的便利,使得你离不开它。因为只需极少的命令即可处理一个比较复杂的问题,而且绿色环保无公害:) 此工具的另一个特色就是可以直接网页采集数据,并可以使用正则对数据做基础的处理然后保存到本地,可以广泛的应用于网页采集。 下面介绍下其主要使用方法: 语法: Regtop 参数1 参数2 参数3 参数4 参数5 参数1 对数据源的操作的方式。共有-g和-r两种形式,下面分别介绍: -g 表示获取,仅仅获取源数据中需要的内容,-g紧接着的后面还有两个缺省元素,第一个一般是t,表示结果以表格形式形式保存,t后面是表格各列之间的分隔符,默认是“,”,一般在要将结果保存为csv文件时会这样设置。可以尝试用下-gt 和 -gt- 和 -g 的区别 -r 表示替换,将数据源中的指定内容替换成其它内容 参数2 数据源。可以是个网址也可以是个本地文件(文本格式)的路径 如果是网址的话需要加个“-w:”然后才可以写网址,表示数据来自与网络,工作时regtop会自动获取该网页的页面源代码,获取方式有两种,utf8模式和普通模式,这个可以通过regtop –d命令设置全局开关。 如果是本地文件的话可以直接写,也可以加个字符-f:然后写路径。这里支持相对路径和绝对路径,直接写个文件名的话就是表示regtop所在的目录。 参数3 处理结果保存位置。可以是个直接的文件路径,同样支持相对路径和绝对路径。 如果和参数2是相同的那么可以写作“%0” 如果对该文件是追加方式那么可用“-a:”前缀表示,默认是覆盖。 参数4 需要匹配正则表达式 参数5 可缺省。此参数是获取需要的匹配内容(-g)或需要替换成的字符(-r),跟参数1相关,下面分别介绍: (1).当参数1为-g时表示获取匹配到的结果中的哪些内容。可缺省。匹配成功后得到的结果可以分为两类:一类是整个表达式的匹配结果,这里称为父匹配;还有一类是括号捕获的结果,这里称为子匹配。 这时的参数5是可缺省,表示仅仅获取父匹配。 如果非缺省的话就是表示只需要指定的结果,形式需要按Regtop指定的规则:Regtop对匹配结果进行了编号,从0开始,0表示父匹配结果,1表示子匹配的第1组,2表示子匹配的第2组…。 假设有个表达式为“a(.*?)b(.*?)c(.*?)d”,那么子匹配有3组,如果我们仅仅需要获取子匹配的第1组和第3组,这时参数5就可以写作“0,1,3”,这里有3个数字,第一个数字的意义和后面的两个是有很大区别的。第一个数字0表示不需要父匹配结果,如果需要的话就写作1,完整的表达式为“1,1,3”,也就是说第一个数字永远只能是0或1,意义就是是否需要父匹配结果。 后面的理解起来就简单多了,1显然就是表示获取子匹配的第1组,3就表示第三组,这里是有顺序的,后面的两个3和1调换下的话,那么输出结果组3的将会排在1的前面,当然也可以重复,比如我要子匹配的3输出两次,那么就写作“0,1,3,3”。如果使用了不存在的子匹配,例如这里用了4那么程序会忽略然后继续处理下一个数字,具体的用户可以用具体的数据去试试。 在这里有个典型的应用就是对csv文件的处理,比如要将文件的第1列和第3列调换下,那么用regtop就可以轻而易举解决了,这里的参数5就是“0,3,2,1”。具体应用实例请参照:http://topic.csdn.net/u/20091218/23/f6abdfed-eb76-4311-9d94-fb0d495372dc.html (2). 当参数1为-r时表示需要替换成的内容。可缺省,缺省表示替换为空。这里一般是个固定的字符串,还可以包含正则本身的特性,例如捕获的结果含有子匹配,那么这里就可以用$1表示子匹配的第1组,$2表示子匹配的第2组,这个属于正则知识本身的范畴了,这里不做讨论,主要说下Regtop中自身的特性,如果替换后的内容包含特殊的字符怎么办?regtop中采用了和大多数语言一样使用了转义的方法处理,例如回车用/r/n表示,制表符用/t表示,具体有时间会整理出一个列表,大多都和标准一样。 regtop下载地址一:http://www.symental.com/sfw/regtop.zip regtop下载地址二:http://download.csdn.net/source/1917925(版本较旧,建议下载上面一个) 其他使用范例: http://topic.csdn.net/u/20100421/11/9558fc42-418d-44e5-9818-790e499e0bee.html (替换指定文件中数据的范例,参考4楼) http://topic.csdn.net/u/20110720/12/119ee538-e3b0-4b28-9ec7-22b61aa99486.html (获取指定文件中数据的范例,只获取指定“列”,参考30楼) http://topic.csdn.net/u/20091218/23/f6abdfed-eb76-4311-9d94-fb0d495372dc.html (获取指定文件中的数据的范例,调整指定“列”,参考7楼) http://blog.csdn.net/sysdzw/article/details/6141844 (正则测试工具,可以快速测试正则表达式的正确性,可以和regtop配套使用) http://hi.baidu.com/sysdzw/blog/item/646cd1f9a4a2c953252df292.html(从网页获取数据并保存为csv文件的范例) http://blog.csdn.net/sysdzw/article/details/6158530 (应用范例推荐:巧用正则巅峰采集黄金白银大盘价信息) 具体使用说明参考:http://blog.csdn.net/sysdzw/article/details/5379345

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧