爬虫看了很多,以前也用PHP写过。原理也是很简单,技术关键是正则表达式。所有你想要的东西,你都可以通过正则表达式把它们匹配出来。说到底就是采集差不多,但我觉得爬虫跟采集不同之处在于,爬虫用来像搜索引擎一样可以进行遍历你的网站或整个互联网的。而采集一般只是针对一些固定的页面,采集固定的内容。以下是我写的一个爬虫代码。不怎么好,python还是刚学。大家参详一下,有什么问题可以在评论中指出,献丑了。
这个是使用了sqlite来记录采集信息的。。
#/usr/bin/python #coding=utf-8 import os import sys import thread import urllib2 import htmllib import re #正则表达式 import sqlite3 class spider(): def __init__(self): pass def getUrlContent(self,url): print(u"开始取得URL的HTML内容...") content = urllib2.urlopen(url).read() # print(content) return content #取得网页的所有地址 # data是html字符串 def getUrlsFromHtml(self,data): print(u"取得页面的所有URL...") patern = r'<a.*?href=[\'|\"](.*?)[\'|\"| ].*?>(.*?)</a>' urlre = re.compile(patern) res = re.findall(urlre,data) return res #爬行 def crawling(self,url): self.count = self.count-1 if self.count==0: return print(u"开始爬取HTML数据....") urlContent = self.getUrlContent(url) urls = self.getUrlsFromHtml(urlContent) #过滤重复的url newUrl = self.uniqueUrl(urls) #递归把收到的地址 再进行爬取数据 for i in newUrl: #检测是否超出当前的网站 if i[0].find(self.domain) == -1 and self.range == 1: print(u"url 不是本站的连接 且设置了不允许出站") # 如果 continue else: print(u"进入递归:%s" % i[0]) #写入数据 self.writeData(i) self.crawling(i[0]) #写入数据 def writeData(self,data): print(u"开始写入数据....") sql = "insert into urls values (NULL,'"+data[1]+"','"+data[0]+"')" res = self.cx.execute(sql) self.cx.commit() if res: return True else: return False #批量检测URL是否已爬过,爬过就丢弃 def uniqueUrl(self,urls): newUrls = [] for i in urls: sql = "select * from urls where url='"+i[0]+"'" res = self.cx.execute(sql) res = res.fetchone() if res == None and i[0] != '#': newUrls.append(i) return newUrls #开始运行 # urlRange是否出站 注意如果允许出站 那么范围将是整个互联网,这可能会造成严重后果 def run(self,url,ranges): self.domain = url self.range = ranges #创建数据库 self.cx = sqlite3.connect(u"./assets/spider.db") #数据库句柄 self.count=10 #从首页开始 self.crawling(url) #检测是否本站url if __name__ == "__main__": sp = spider() sp.run("http://www.junglecat.tech",0)