凡举搜索引擎都需要只能网络爬虫来获得最新的网络信息,那么我们自己也可以实现一个简单的定点的爬虫来获取自己感兴趣的内容,论开发速度,我推荐python
使用urllib和HTMLParser这两个模块就可以完成一个不错的基本功能的爬虫了,废话少说,现在开始
首先是获取链接的线程,函数如下
代码
接着是解析网页内容的类:
代码
1 class IndexPage(HTMLParser.HTMLParser):
2 def __init__(self, cbFun, cbFunCmd):
3 HTMLParser.HTMLParser.__init__(self)
4 self.ids = ids
5 self.cbFun = cbFun
6 self.cbFunCmd = cbFunCmd
7 pass
8 def handle_starttag(self, tags, attrs):
9 if tags == 'a':
10 for attr in attrs:
11 for t in attr:
12 if '?id=' in t:
13 id = t.split('?id=')[1]
14 #self.ids.append()
15 if not exist(self.ids,TABLEURL + id):
16 self.ids.append(TABLEURL + id)
17 self.cbFun(TABLEURL + id)
18 #self.cbFunCmd('now collected link number ' + str(len(self.ids)))
19 pass
20 pass
21 pass
22 pass
23 pass
24 pass
25
将取出的可用链接保存到一个元组中,在开启另一个线程
代码
1 def collectthread(cbFunCmd):
2 token = 1
3 while(token):
4 if (len(ids) > 0):
5 url = ids.pop(0)
6 data = getwebcontent(url)
7 parser = ContentParser(cbFunCmd)
8 parser.feed(data)
9 QQS = parser.get_QQs()
10 #print(QQS)
11 #pushToDB(QQS)
12 pass
13
这个线程监视那个元组内容,不为空时,pop出内容进行处理,处理类如下
代码
class ContentParser(HTMLParser.HTMLParser):
def __init__(self, cbFun):
HTMLParser.HTMLParser.__init__(self)
self.cbFun = cbFun
self.QQs = []
pass
def handle_starttag(self, tags, attrs):
key = ''
value = ''
if (tags == 'input'):
for attr in attrs:
if (attr[0] == 'id'):
key = attr[1]
if (attr[0] == 'value'):
value = attr[1]
if tags == 'select':
for attr in attrs:
if attr[0] == 'id':
key = attr[1]
if tags == 'option':
if len(attrs) == 2:
for attr in attrs:
if attr[0] == 'value':
key = self.QQs.pop()[0]
value = attr[1]
#print( (key, value) )
if (key != '' and key != 'save'):
self.QQs.append( (key, value) )
pass
def get_QQs(self):
return self.QQs;
当然,不要忘记定义那个元组
1 ids = []
最后,获取源码的方法
代码
1 def getwebcontent(url):
2 #url = INDEXURL + '10'
3 data = urllib.urlopen(url).read().decode('utf-8')
4 #data = data.replace(u'\u67fb', '')
5 #data = data.replace(u'\u6d11', '')
6 uData = data.encode('gbk')
7 return uData;
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com