【www.bbyears.com--python】
代码如下
#!/usr/bin/env python
#-*-encoding=utf-8 -*-
import urllib2
import re
URL = "http://www.qiushibaike.com/hot/page/"
#first = re.compile(r"]*>.*?(?=)")
first = re.compile(r")")
second = re.compile(r"(?<=>).*")
def main():
recCount = 5
total = 1
ipage = 1
while True:
content = urllib2.urlopen(URL + str(ipage)).readlines()
alls = ""
for s in content:
alls += s.strip()
#print first.findall(alls)
ipage+=1
fs = first.findall(alls)
thispage = [second.findall(s.strip())[0] for s in fs if s]
for i, p in enumerate(thispage):
print total," ",p
total += 1
if (i + 1) % recCount == 0:
raw_input("nPress Key To Start Moren")
ipage+=1
if __name__ == "__main__":
main()
代码内容比较简单,只定义了一个main函数,最后调用即可。具体几个知识点为:
findall()是re模数里的一个查找所有匹配内容的函数
strip()函数由于字符串序列删除,在未传参的情况下默认删除空白符(包括"n", "r", "t", " ")
enumerate()函数在对一个列表或数组既要遍历索引又要遍历元素时,会比range、list等复杂表达式去表达更优美,简洁。
注:上面python代码中有一个不太完美的地方就抓取的内容中没有把
这种换行给去掉,不过就正则实现或strip实现也很容易,相对而言php中的strip_tags显的就比较有优势(python中没有strip_tags函数)。
反思:
该例如果实用php语言去实现的话也比较简单,具体思路如下,具体代码就不再写了:
代码如下 //获取页面内容
file_get_contents("http://www.111cn.net/");
//用preg_match_all 正则匹配所有内容
preg_match_all
//利用strip_tags()去除所有html标签
strip_tags注:很多主机上不支持file_get_contents()函数,这就需要使用php的curl去获取页面,如果使用curl的话代码会相对显的多一点。
最后对于图片进行了升级处理
代码如下 from sgmllib import SGMLParser
import urllib2
class sgm(SGMLParser):
def reset(self):
SGMLParser.reset(self)
self.srcs=[]
self.ISTRUE=True
def start_div(self,artts):
for k,v in artts:
if v=="author":
self.ISTRUE=False
def end_div(self):
self.ISTRUE=True
def start_img(self,artts):
for k,v in artts:
if k=="src" and self.ISTRUE==True:
self.srcs.append(v)
def download(self):
for src in self.srcs:
f=open(src[-12:],"wb")
print src
img=urllib2.urlopen(src)
f.write(img.read())
f.close()
sgm=sgm()
for page in range(1,500):
url="http://www.qiushibaike.com/late/page/%s?s=4622726" % page
data=urllib2.urlopen(url).read()
sgm.feed(data)
sgm.download()