#coding:utf-8
import urllib2
import re
import sys
import dbtest
import zlib
#key=raw_input("please input a url:")
#urlstr='http://www.baidu.com/s?wd=%s'% key
#f=urllib2.urlopen(urlstr)
#buf=f.read()
#buf=buf.replace("\n","")
def getHref(url):
f=urllib2.urlopen(url)
buf=f.read()
if f.headers.get('Content-Encoding') == 'gzip':
buf = zlib.decompress(buf, 16+zlib.MAX_WBITS)
buf=buf.replace("\n","")
buf_all=re.findall("<a.*? href=\"(.*?)(?=[\"])",buf)
return buf_all
def save_start(url):
while 1:
try:
buf_all=getHref(url)
if buf_all != None and len(buf_all)>0:
for n in buf_all:
n.strip
print n
if n.find("http://")>-1:
dbtest.save(n,n)
except:
pass
u=dbtest.get_one_00()
if u is None:
break
dbtest.update_url(u.url)
url=u.url
save_start(sys.argv[1])
#coding:utf-8
from uliweb.orm import *
db=get_connection('mysql://root:123@localhost/spider?charset=utf8')
class spider_url(Model):
url=Field(str)
status=Field(str)
db.metadata.drop_all();
db.metadata.create_all()
def save(url,status):
n=spider_url.get(spider_url.c.url==url)
if n:
return;
n=spider_url()
n.url=url
n.status='0'
n.save()
def update_url(url):
n=spider_url.get(spider_url.c.url==url)
n.status="1"
n.save();
def get_many_00():
alls=spider_url.filter(spider_url.c.status=='0')
return alls;
def get_one_00():
alls=spider_url.get(spider_url.c.status=='0')
return alls;
#del del_all():
# db.metadata.create_all()
#get_all()
本文探讨了如何使用Python的urllib2库进行网页爬取,并解析获取的HTML内容,提取链接并存储到数据库中。介绍了如何处理不同类型的网页编码,如gzip编码,并通过正则表达式提取所需链接。此外,还实现了一个简单的数据库模型用于存储爬取的链接,并通过更新和获取链接的功能实现了链接的循环爬取。
1237

被折叠的 条评论
为什么被折叠?



