【发布时间】:2011-12-29 04:47:03
【问题描述】:
使用以下解决问题(对于剩余的问题,将更改我的代码)。对不起,我最初的帖子中的代码格式不正确。
import csv, re, mechanize
htmlML = br.response().read()
#escaping ? fixed the regex match
patMemberName = re.compile('<a href=/foo.php\?XID=(d+) ><font color=#000000><b>(.*) </b>')
searchMemberName = re.findall(patMemberName,htmlML)
MembersCsv = 'path-to-csv'
MemberWriter = csv.writer(open(MembersCsv, 'wb')) #adding b fixed the \n in csv
for i in searchMemberName:
MemberWriter.writerow(i)
print (i)
感谢您的宝贵时间
【问题讨论】:
-
在正则表达式中,问号表示“零或前一个字符类”,句点表示“任何字符”。因此,当您说 .php? 时,您并不是真的在寻找 .php?。试试 [.]php[?]
-
如果您使用 Python2,请将
csv.writer(open(MembersCsv, 'w'))更改为csv.writer(open(MembersCsv, 'wb'))(因为 Python2 希望以二进制形式打开 csv 文件)。无论 Python 版本如何,将MemberWriter.writerow(i)更改为MemberWriter.writerow([i])(因为writerow想要一行项目——目前它将每个字符解释为一个项目)。最后,如果每行只有一个项目,你真的需要 csv 吗? -
不要使用正则表达式解析 html。见stackoverflow.com/questions/2861/options-for-html-scraping。
-
另外,这个问题如果分成两个问题会更好。
-
@k3rb3r05,StackOverflow 有非常好的格式化能力;请learn to use them。我试图自己重新格式化问题,但我什至不知道你在尝试什么。
标签: python regex csv screen-scraping