作者swpoker (swpoker)
看板Python
标题Re: [问题] 爬虫错误
时间Tue May 21 09:22:33 2013
其实首先网页都是stateless的
所以不能有该连线的状态可以维持一阵子
基本当资料传送+接收完其连线就会结束
没办法让你像开个socket一样放在那里一值用
然後我定义好一个目的就是
我要能拿到目标资料
首先第一步就是
def getcontent(相关的连线参数->参数或是global都可以):
con = 连线
rs = 得到资料
return rs
在你的主要逻辑就可以分离了
soup = BeautifulSoup(getcontect(连线参数))
接着就可以在该getcontent增加一些东西
例如
1.如果得到资料失败可以在试看看然後有次数的限制
def getcontect(retry = 5 , retrytime=100):
exception = none
for in in range(5):
try:
con=连线
rs = 得到资料
处理其他->或是也可放在final处理 看你搂
可以先判断一下得到的内容是不是正确->通常有值我就当正确了然後就回传了
if rs : return rs
except XXException:
exception = 处理错误
其他错误例外处理...
time.sleep(retrytime)
if exception : raise exception
return '' -->这里要看回传空 还是丢出错误 就看你
如果要处理连线的问题
你是使用open然後read其实就是连线的时候才需要开启
如果没事的话该连线就会关闭
这是http +tcp/ip的特性
除非用socket
可是你连的是网站就是这样
所以前提就是你要知道连线的特性
提供给你参考
※ 引述《darklimit ()》之铭言:
: 应用随机休息再继续,还是会出现这样的错误
: error: [Errno 10054] 远端主机已强制关闭一个现存的连线。
: 进行except例外处理,continue继续的话
: 後面nameTag对应到的genre,rating 全部都会打乱
: 这样应该要怎麽处理?
: 谢谢
: for i in idlist:
: headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT
: 6.1;en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
: req =
: urllib2.Request("http://www.imdb.com/title/tt"+i+"/",headers=headers)
: try:
: html =
: urllib2.urlopen("http://www.imdb.com/title/tt"+i+"/",timeout = 30)
: htmls = html.read()
: html.close
: soup = BeautifulSoup(htmls)
: nameTag = [a.get_text() for a in soup.find_all("title")]
: genreTag = [a.get_text() for a in
: soup.find_all("span",{"itemprop":"genre"})]
: ratingTag = soup.find_all("span",{"itemprop":"ratingValue"})
: for tag in nameTag:
: titlelist.append(nameTag)
: for tag in genreTag:
: genrelist.append(genreTag)
: break
: for tag in ratingTag:
: val = ''.join(tag.find(text=True))
: valuelist.append(val)
: except HTTPError, e:
: print e.code
: print e.read()
: #continue
: except URLError, e:
: print 'Reason: ', e.reason
: #continue
: rsleep = random.randint(10, 40)
: time.sleep(rsleep)
: return zip(titlelist, genrelist, valuelist)
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.29.28.131
1F:→ darklimit:谢谢你提供的建议与想法,XD谢谢~ 05/22 17:59