返回信息流我想抓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
问题在哪啊?
这是一条镜像帖。来源:北邮人论坛 / python / #8535同步于 2015/9/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
python re.findall 总会hang住
youziboy
2015/9/12镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
估计是页面文本大,你的正则表达式又太复杂,所以需要时间多吧。
return _compile(pattern, flags).findall(string)这句其实就是调用c语言写的模块了
来自「北邮人论坛手机版」
但有时候很快啊,
我让他运行了一晚上,也没有卵用呢。。
【 在 asif12 的大作中提到: 】
: 估计是页面文本大,你的正则表达式又太复杂,所以需要时间多吧。
: return _compile(pattern, flags).findall(string)这句其实就是调用c语言写的模块了
: 来自「北邮人论坛手机版」
【 在 youziboy 的大作中提到: 】
: 但有时候很快啊,
: 我让他运行了一晚上,也没有卵用呢。。
很快的时候估计匹配的东西少吧,正则表达式不适合解析xml这种文件,使用lxml,beautifulsoup这些吧
来自「北邮人论坛手机版」
都是同一个网页呢。
【 在 asif12 的大作中提到: 】
:
: 很快的时候估计匹配的东西少吧,正则表达式不适合解析xml这种文件,使用lxml,beautifulsoup这些吧
: 来自「北邮人论坛手机版」