拖延症的严重程度有增无减。
每每临到笔试面试才会看点书,好在还是有公司收留了我。
之后开始做了点之前一直拖着的事。
-------------------------------------------我是第一部分的分割线--------------------------------------------------------------------------------
先前把上次项目的网页美化了下,用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")%>" />
<%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上的比赛打个酱油,但水平依然很水。
唔,就这样吧。下面的日子还得加油。