麻烦帮忙看一下这个「正则表达式」?

2013-07-27 11:16:42 +08:00
 zippera
<div class="content" title="2013-07-25 09:09:58">

要匹配的内容

</div>

re:
pat = re.compile(r'<div.*?class="content".*?ti.*?>(.*?)</div>')
pat.findall(ucpage, re.S)
...


没有匹配的结果,正则表达式哪里出问题了?
6443 次点击
所在节点    Python
19 条回复
timonwong
2013-07-27 11:23:16 +08:00
re.MULTILINE
timonwong
2013-07-27 11:23:55 +08:00
手滑,应该是 re.DOTALL
lyjyiran
2013-07-27 11:25:58 +08:00
下面findall没re.S这个参数

re.compile那行re.I改成re.I | re.S

对html操作, 建议别用正则,用bs4、lxml、pyquery这些比较好
suchj
2013-07-27 12:22:03 +08:00
你的内容是换行的吧,试试换行模式吧,python2.7.5下测试可行
http://gist.github.com/miraclesu/6093693
sujin190
2013-07-27 12:34:09 +08:00
未启用多行模式
zippera
2013-07-27 12:34:10 +08:00
@timonwong
@lyjyiran 多谢,我都没注意到放错位置了。

初学爬虫,先用正则,lxml、pyquery、bs后面会学。

还有另外一个问题:
用 f.writelines()保存文本到txt文件中,出现错误:

TypeError: writelines() argument must be a sequence of strings

是编码的问题吗,我已经用decode("utf-8")转码了啊
zippera
2013-07-27 12:36:08 +08:00
@suchj 的确是这样,谢谢,麻烦帮忙再看下6楼那个问题
pandada8
2013-07-27 20:34:07 +08:00
@zippera writelines() 传入的参数是一个序列 []
不知道是不是这个问题
ccdjh
2013-07-27 21:16:06 +08:00
去一下空格和换行
内容.replace(' ','')
内容.replace('\n','')
内容.replace('\r','')
zippera
2013-07-27 21:33:42 +08:00
@pandada8
@ccdjh
好像就是符号的问题。还是不行,请帮忙看看,贴代码:(BTW,除了replace有更好的办法吗)

<script src="https://gist.github.com/zippera/6094881.js"></script>
zippera
2013-07-27 21:36:42 +08:00
timonwong
2013-07-27 21:45:12 +08:00
@zippera
writelines需要写一个字符串序列(比如字符串列表),但是item是字符串。
你需要使用write()
pandada8
2013-07-27 21:50:53 +08:00
writelines(lines):
Write a list of lines to the stream.

#所以要用writelines的话应该要传入一个列表或元组

这里应该可以直接write(item+"\n")

处理网页最好还是用 BeautiulSoup

最好把文件打开关闭的操作放到For循环外面
或者你可以mat中所有的数据处理后在使用 writelines 一次写入
注意writelines 写入时不会帮你加回车

if len(mat)似乎可以去掉
python的for语句也是有 else 语句块的
当mat为空时,执行else语句块
clowwindy
2013-07-27 21:53:54 +08:00
HTML 不是正则语言,不要用正则表达式处理。
pandada8
2013-07-27 21:59:37 +08:00
写入时在我这里报了一个
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-16: ordinal not in range(128)

大约你可以看看

http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html

//快用Python3啊,Utf-8解脱一切啊
zippera
2013-07-27 22:11:08 +08:00
@pandada8 编码问题真麻烦。刚开始学习,漏洞百出,多谢你的这么多建议。
@timonwong 的确是,我没注意
@clowwindy 我看好多人都用正则,而且据说比其他工具快
ccdjh
2013-07-27 23:20:29 +08:00
提取content里面的内容,对吧?直接shell哈,我就不整理了

import re
import urllib

url = "http://www.qiushibaike.com/month/page/"
r = urllib.urlopen(url).read()
html = r
strlist = html.split("""<div class="block untagged mb15 bs2" id=""")
len(strlist)
d = strlist[2]
tmp = d.replace(' ','')
tmp2 = tmp.replace('\n','')
tmp3 = tmp2.replace('\r','')
f = re.findall('''<divclass="content"title=(.*?)</div>''',tmp3)
binux
2013-07-27 23:30:51 +08:00
@zippera 快是说如果你的问题能直接用正则表示出来,那么很快。你看你这里明明就不可以
iveney
2013-07-28 05:22:53 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77127

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX