BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #8535同步于 2015/9/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

python re.findall 总会hang住

youziboy
2015/9/12镜像同步9 回复
我想抓http://www.zillow.com/homes/for_rent/02138_rb/1_p 网页上的内容。使用正则表达式去匹配,有时候能成功,有时候确总在re.findall(pattern.page)地方hang住了。 正则表达式是: pattern = "<article.*?latitude="(.*?)".*?longitude="(.*?)">.*?<a href="(.*?)".*?<figcaption.*?>(.*?)</figcaption>.*?</a>.*?<dt class="listing-type zsg-content_collapsed"><span.*?></span>(.*?)</dt>" The snippet code is: def getPage(strUrl): socket.setdefaulttimeout(60) try: request = urllib2.Request(strUrl) #mock browser request.add_header("User-Agent","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0") response = urllib2.urlopen(request) except urllib2.URLError, e: print "Bad Url or timeout" print type(e) print e page = '' except socket.timeout,e: print "socket timeout" print type(e) print e page = '' else: page = response.read().decode('utf8') print "Get page contents successfully" return m_page def getHouseInfo(self,strRegularExpr,page): if strRegularExpr=='' or page=='': print "regular expression is null or page is null." return False pattern = re.compile(strRegularExpr,re.S) items = re.findall(pattern,page) #这里总是hang住,不走了。。。。 return items def getHomeDetailLinks(page): print "<<<<<<Get links starts>>>>>>" items = getHouseInfo(mapRe['homeDetailLinks'],page) print items print "<<<<<<Get links ends>>>>>>" return items page = getPage("http://www.zillow.com/homes/for_rent/02138_rb/1_p") temp = getHomeDetailLinks(page) print temp 我使用CTRL+C中断执行时候,报了下面的错误: ^CTraceback (most recent call last): ...... items = self.getHouseInfo(mapRe['homeDetailLinks'],page) File "/***/***/***/crawlbase.py", line 59, in getHouseInfo items = re.findall(pattern,page) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 177, in findall return _compile(pattern, flags).findall(string) KeyboardInterrupt 问题在哪啊?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
youziboy机器人#1 · 2015/9/12
急等啊!!
asif12机器人#2 · 2015/9/12
估计是页面文本大,你的正则表达式又太复杂,所以需要时间多吧。 return _compile(pattern, flags).findall(string)这句其实就是调用c语言写的模块了 来自「北邮人论坛手机版」
youziboy机器人#3 · 2015/9/12
但有时候很快啊, 我让他运行了一晚上,也没有卵用呢。。 【 在 asif12 的大作中提到: 】 : 估计是页面文本大,你的正则表达式又太复杂,所以需要时间多吧。 : return _compile(pattern, flags).findall(string)这句其实就是调用c语言写的模块了 : 来自「北邮人论坛手机版」
asif12机器人#4 · 2015/9/12
【 在 youziboy 的大作中提到: 】 : 但有时候很快啊, : 我让他运行了一晚上,也没有卵用呢。。 很快的时候估计匹配的东西少吧,正则表达式不适合解析xml这种文件,使用lxml,beautifulsoup这些吧 来自「北邮人论坛手机版」
youziboy机器人#5 · 2015/9/12
都是同一个网页呢。 【 在 asif12 的大作中提到: 】 : : 很快的时候估计匹配的东西少吧,正则表达式不适合解析xml这种文件,使用lxml,beautifulsoup这些吧 : 来自「北邮人论坛手机版」
nuanyangyang机器人#6 · 2015/9/12
.*这种东西…… 楼主用beautifulsoup吧,解析html不要用正则表达式。
WTF机器人#7 · 2015/9/12
话说看到你的题目,然后默默去看了在跑自己的程序有没有hang住 ps: 用bs4啊
moonfighting机器人#8 · 2015/9/12
解析这么大的html还用正则简直就是自己给自己找罪受,跟风推荐beautifulsoup
kuangfengwin机器人#9 · 2015/9/12
借楼学习