分类目录

链接

友情链接

统计信息

  • 日志总数:116篇
  • 评论总数:185条
  • 分类总数:11个
  • 标签总数:391个
  • 友情链接:0个
  • 网站运行:3288天

2019年十二月
« 10月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
>
现在位置:    首页 > python学习笔记 > 正文

python+sqlite 写的一个小爬虫程序 发出来大家看一下有什么问题

python学习笔记 暂无评论

 爬虫看了很多,以前也用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)

本文版权归企业网站建设,做网站,网站建设,php网站建设,dedecms建站,ecshop二次开发,html空间,网站修改所有,转载引用请完整注明以下信息:
本文作者:admin
本文地址:python+sqlite 写的一个小爬虫程序 发出来大家看一下有什么问题 | 企业网站建设,做网站,网站建设,php网站建设,dedecms建站,ecshop二次开发,html空间,网站修改

发表评论

留言无头像?