无可救药的拖延症——关于asp网页使用Access及大图浏览效果以及爬虫登录及下载文件

3 篇文章 0 订阅
3 篇文章 0 订阅
开学至今一直觉得很忙,却又说不清到底做了什么事。

拖延症的严重程度有增无减。

每每临到笔试面试才会看点书,好在还是有公司收留了我。

之后开始做了点之前一直拖着的事。

-------------------------------------------我是第一部分的分割线--------------------------------------------------------------------------------

先前把上次项目的网页美化了下,用framset进行了分块,还增加了几个查询接口。

又因为给家里做的网站需要新增加一批图片,之前偷懒做成了静态,为了方便后面修改还是改成了db版。鉴于买的空间功能限制,数据库使用了最简单的Access。甚至我都没有装上Access软件,用的绿化版的mdb plus viewer。

asp中连接Access还是很方便的。conn.asp里面写上下面代码。

<%
dim conn,strsql
	Set conn = Server.CreateObject("ADODB.Connection")
	strsql="driver={microsoft access driver (*.mdb)};DBQ=" &Server.MapPath("hmmmdb.mdb")
    conn.open(strsql)
%> 
在需要连接数据库的页面包括这个文件以后通过下面的语句查询,

	cnt=(cint(request("page"))-1)*9
set rs_c=server.createobject("adodb.recordset") sql_c="select top 9 * from products where id>"&cnt&" order by id" rs_c.open sql_c,conn,1,1
这里9是每页显示9张图片,用这个代码可以取出当前页应该显示的图片信息。

<%
if isempty(request("page")) then
  page=1
else
  page=request("page")
end if
MaxPerPage=9
pageCnt=Int((cint(rs_t("cnt"))-1)/MaxPerPage)+1
i=1
%>
上面的代码是用来在计算当前页和总页数的,cint是四舍五入,Int是向下取整。

显示图片只需这样写链接就可以:

<img src="images/<%=rs_c("pic")%>"  />


在页面下方通过判断当前页是否是第一页或者最后一页来控制是否有上一页或下一页链接时会有个bug,从第二页转到第一页时这个判断会不对。后来通过判断记录数是否大于当前页乘以每页图片最大数目就可以正确。代码是这样的:

 <%if cint(rs_t("cnt"))>page*MaxPerPage then%>
 <a href="products.asp?page=<%=page+1%>">下一页</a> <a href="products.asp?page=<%=pageCnt%>">尾页</a>

最后关闭数据库链接是用这样的代码:

<%rs_c.close
set rs_c=nothing%>

在页面上这次还加了大图浏览效果,用的是开源的lightbox2,网址戳这里: http://lokeshdhakar.com/projects/lightbox2/

里面有下载和使用说明。其实包括该包括的文件以后只需要加上

rel="lightbox[plants]"

就可以,这个是可以连续浏览,去掉[plants]则是单张的放大效果。


之后还试图分块,但是无奈分块后滚动条效果实在欠佳,于是放弃。貌似frameset还是做后台或是明显有分块的页面比较多,普通页面还是不适合。

顺便插一句<frameset>这个玩意要放在</head>后面 ,<body>前面。


另外配置IIS的时候处理下错误页,这样就可以看到错误信息。方法戳这里:http://wenku.baidu.com/view/d409b6d5360cba1aa811da7c.html

这里是常规的配置,戳这里:http://blog.sina.com.cn/s/blog_55b0c6470100h355.html

-----------------------------------------------------------------我是第二部分的分割线---------------------------------------------

网站结束就是爬虫了,要求是从一个需要登录的网站上下载文件。

之前写爬虫都用的scrapy,这一次还是一样。

登录据说可以使用FormRequest直接处理,但是我失败了,T T。于是在抓包查看需要发送的信息以后直接通过url把数据post过去,就像这样:

https://www.xxx.com/Login/Index.cfm?LoginUsername=xxx&LoginPassword=xxx&Action=Login&stgRU=http%3A%2F%2Fwww.xxx%2FSearch%2F%3Fkeyword%3DFree&yyy

,而且反复实验发现这个链接需要访问两次才可以,第一次会有系统错误。于是有了下面的代码:


	start_urls=["https://www.xxx.com/Login/Index.cfm?LoginUsername=xxx&LoginPassword=xxx&Action=Login&stgRU=http%3A%2F%2Fwww.xxx%2FSearch%2F%3Fkeyword%3DFree&yyy"]
	def parse(self,response):	
		return [Request(url="https://www.xxx.com/Login/Index.cfm?LoginUsername=xxx&LoginPassword=xxx&Action=Login&stgRU=http%3A%2F%2Fwww.xxx%2FSearch%2F%3Fkeyword%3DFree&yyy",callback=self.parse_item)]

虽然长的难看,但真心可以用。O(∩_∩)O~

stgRU是一个跳转链接,这里需要注意转义符。

我用到的有

%3A  :
%2F  /
%3F ?
%3D =
%26 &
我抓包直接用的chrome自带的,ctrl+shift+I以后的network就可以看到包。

话说这次终于知道为什么在提取xpath的时候如果用tbody总是找不到了,因为这个tbody是插件给加上的,源代码其实没有,T T。

这次需要抓的东西经常需要正则表达式。

reg=re.compile('\"NAME\"\:\"(.*?)\"')
		fileNm=reg.search(info)
和
reg=re.findall('\"NAME\"\:\"(.*?)\"')
		fileNm=reg.findall(info)

是不同的,search只找一次,findall是找所有的。(这句像废话)

还有一点是,用search的时候找到的是”NAME“:”XXX“这样,就是连头连尾,而findall找的是括号里的东东,就是XXX。

findall返回的是一个list,所以可以用fileNm[0]来取第一项,不过用下标之前一定要判断是否为空,否则空了就会出错。

用search的时候显示是用search.group()这样的。

.*?这样是非贪心的,就是可以找到符合的就不会贪心匹配最大的那个。

比如<xxx><yyy>这样用非贪心找<>间的东西找到的就是xxx,而诸如.*这样的就会贪心找到xxx><yyy。

PS:python这样的动态语言测试正则表达式真心舒服。

通过链接来下载文件可以使用python自带的模块。简单代码如下:

import os
import urlli

filepath="G:\downModel"
if os.path.exists(filepath) is False:
	os.mkdir(filepath)
temppath=filepath+"\"+fileNm[0]
urllib.urlretrieve(url,temppath)

其中fileNm[0]是完整的文件名,带后缀,url为链接地址。


以上是最近忙乎的还能算是事情的事情。

当然其实还有一部分时间是在看算法,准备笔试面试。

偶尔去各种OJ上的比赛打个酱油,但水平依然很水。


唔,就这样吧。下面的日子还得加油。









  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值