您的位置:新葡亰496net > 网络数据库 > 爬取某网站电影信息并写入mysql数据库,linq中如

爬取某网站电影信息并写入mysql数据库,linq中如

发布时间:2019-10-20 23:49编辑:网络数据库浏览(178)

    原来觉得正则表明式里面包车型客车特别d相称数字放到sql语句里面也是适用的,没悟出一向不相配。可是放到编制程序语言java可能js里面又十分。看了刹那间原本sql对正则的支撑未有那么完美。必定要用[0-9]意味着数字。原因的话作者猜是sql是一门查询语言,设计标准不该有和编制程序语言临近的事物

    Atitit  补充表明 sql知识图谱与线路图attilax总括补充表达

      其实sql优化正是对索引的优化,不加索引的情形下,单表查询你怎么查时间复杂度都以O(n),所以sql优化难题根本就在目录上。

      最近接触管理数量那龙精虎猛块非常多,在处理内部存款和储蓄器中的数据源的时候小编平常选择的是linq,linq使用起来像sql语句同样,用法简单,功效强大。

    书接上文,前文最终提到将爬取的影视消息写入数据库,以利于查看,明日就实际达成。

     

    mysql索引有二种档案的次序,hash和tree,可是hash的局限性太多了,并且再也数据多时hash索引的频率裁减的急迅,所以就说一下本身对最常用的btree索引的见识。

      近些日子内需完毕三个从多个例外的文书读取分歧的数目,然后依据那四个数据的有的字段经行联合,然后把她们的结果放到一个数据源里面里啊,日常的如日中天块查询多个数据源,都以经过叁个数据源的字段和另三个数据源的字段经行相称就能够了,假若是那样的话在linq得以达成和在sql里面达成其实大约,上边是单个条件的共同查询的代码如下所示

    首先还是上代码:

    1. 大规模编制程序语言的归类  :命令式语言、函数式语言、逻辑语言1

      mysql的btree索引恐怕叫b+tree索引就是一日千里颗二叉寻觅树,何况在二叉寻觅树叶节点间加了指针以利于排序或询问某范围的数量等气象采用。

      

    # -*- coding:utf-8 -*-
    import requests
    import re
    import mysql.connector
    
    #changepage用来产生不同页数的链接
    def changepage(url,total_page):
        page_group = ['https://www.dygod.net/html/gndy/jddy/index.html']
        for i in range(2,total_page 1):
            link = re.sub('jddy/index','jddy/index_' str(i),url,re.S)
            page_group.append(link)
        return page_group
    #pagelink用来产生页面内的视频链接页面
    def pagelink(url):
        base_url = 'https://www.dygod.net/html/gndy/jddy/'
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}
        req = requests.get(url , headers = headers)
        req.encoding = 'gbk'#指定编码,否则会乱码
        pat = re.compile('<a href="/html/gndy/jddy/(.*?)" class="ulink" title=(.*?)/a>',re.S)#获取电影列表网址
        reslist = re.findall(pat, req.text)
    
        finalurl = []
        for i in range(1,25):
            xurl = reslist[i][0]
            finalurl.append(base_url   xurl)
        return finalurl #返回该页面内所有的视频网页地址
    
    #getdownurl获取页面的视频地址和信息
    def getdownurl(url):
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}
        req = requests.get(url , headers = headers)
        req.encoding = 'gbk'#指定编码,否则会乱码
    
        pat = re.compile('<a href="ftp(.*?)">ftp',re.S)#获取下载地址
        reslist = re.findall(pat, req.text)
        furl = 'ftp' reslist[0]
    
        pat2 = re.compile('<!--Content Start-->(.*?)<!--duguPlayList Start-->',re.S)#获取影片信息
        reslist2 = re.findall(pat2, req.text)
        reslist3 = re.sub('[<p></p>]','',reslist2[0])
        fdetail = reslist3.split('◎')
    
        return (furl,fdetail)
    
    #创建表movies
    def createtable(con,cs):
        #创建movies表,确定其表结构:
        cs.execute('create table if not exists movies (film_addr varchar(1000), cover_pic varchar(1000), name varchar(100) primary key,
         ori_name varchar(100),prod_year varchar(100), prod_country varchar(100), category varchar(100), language varchar(100), 
         subtitle varchar(100), release_date varchar(100), score varchar(100), file_format varchar(100), video_size varchar(100), 
         file_size varchar(100), film_length varchar(100), director varchar(100), actors varchar(500), profile varchar(2000),capt_pic varchar(1000))')
        # 提交事务:
        con.commit()
    
    #将电影地址和简介插入表中
    def inserttable(con,cs,x,y):
        try:
            cs.execute('insert into movies values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',
        (x,y[0],y[1],y[2],y[3],y[4],y[5],y[6],y[7],y[8],y[9],y[10],y[11],y[12],y[13],y[14],y[15],y[16],y[17]))
        except:
            pass
        finally:
            con.commit()
    
    if __name__ == "__main__" :
        html = "https://www.dygod.net/html/gndy/jddy/index.html"
        print('你即将爬取的网站是:https://www.dygod.net/html/gndy/jddy/index.html')
        pages = input('请输入需要爬取的页数:')
        createtable
        p1 = changepage(html,int(pages))
    
        #打开数据库
        conn = mysql.connector.connect(user='py', password='Unix_1234', database='py_test')
        cursor = conn.cursor()
        createtable(conn,cursor)
        #插入数据
        j = 0
        for p1i in p1 :
            j = j   1
            print('正在爬取第%d页,网址是 %s ...'%(j,p1i))
            p2 = pagelink(p1i)
            for p2i in p2 :
                p3,p4 = getdownurl(p2i)
                if len(p3) == 0 :
                    pass
                else :
                    inserttable(conn,cursor,p3,p4)
        #关闭数据库
        cursor.close()
        conn.close()
        print('所有页面地址爬取完毕!')
    

    1.1. 遵从编制程序语言的代际划分,又2gl,3gl,4gl,5gl   ,sql属于4gl1

    目录最大的标题正是在广大时候不能够卓有功能,互连网跟索引有关的稿子非常多,基本上正是某某情形下索引不能够见效,等品级一次全国代表大会篇;

     var result1 = from l1 in list1
                             join l2 in list2
                             on l1.Id equals l2.Id
                             select new
                             {
                                 l1Nmae = l1.Name,
                                 l2Nmae = l2.Name
                             };
    

    用到的知识点和近些日子比,最根本是多了数据库的操作,下边简介下python怎么着连接数据库。

    1.2. 如约世界范围可分为通用语言与dsl领域特定语言,sql语言属于dsl1

    然则作为三个技师要是死记硬背那几个个那真未有用,找个文科生比我们背的好。所以本身总计了几点索引无法立见功能的来头,互连网说的这几个个都能够归到这几类里面。

    只是linq中动用的是equals并非sql中的“=”; 

    后生可畏、python中采纳mysql供给驱动,常用的有法定的mysql-connect-python,还会有mysqldb(Python 2.x)和pymysql(Python 3.x),那多少个模块既是驱动,又是工具,可以用来一贯操作mysql数据库,也正是说它们是因此在Python中写sql语句来操作的,比如创立user表:

    2. 哪些判定一门编制程序语言完备不完备,为啥脚本语言往往不完备?1

      1,sql写的不规范照旧叫mysql查询引擎没有进展优化导致无法使索引生效。

    只是那只是形似都在的须求,这几天笔者将要通过那七个数据的七个字段分别经行相配工夫获得本人想要的数额结果,那该怎么样呢?

    cursor.execute('create table user (id int, name varchar(20))')

    2.1. Sql语言又有一点内置函数?2

    比方,如若对有些varchar类型的字段创建了目录,而自身在sql中原则写的是columnvlaue = 1(注意那是贰个数字),这年字段类型和参数类型不宽容,因而在查询时索引不会生效。

      有三种方法

    #此地的create table语句就是优异的sql语句。

    2.2. Sql语言中的变量与数据结构,比比较多是表和视图风流倜傥类复合结构2

    实在查询引擎完全能够扩充优化,或然编写sql的人统统能够将sql改的正经来制止这几个难题。

      如日方升、能够使用此番询问的结果与此中的一个数据源经过一再仇者联盟袂查询。代码省······

    二、还应该有很多意况下我们用ORM(object relational mapping)即对象映射关系框架,将编制程序语言的靶子模型和数据库的关系模型(RubiconDBMS关系型数据库)进行映射,那样能够一向利用编制程序语言的目的模型操作数据库,实际不是行使sql语言。同样创制user表:

    2.3. Sql知识图谱计算16个分类,200个知识点。2

       2,mysql设计的btree不可能支撑那样查询。

      二、linq的意气风发块查询本身将要扶助多规格的联手查询,代码如下所示

    user=Table('user',metadata,
    Column('id',Integer),
    Column('name', String(20))
    )
    metadata.create_all()
    #此间能够观望平昔未有sql语句的影子,那样我们得以小心在Python代码并不是sql代码上了。(注意ORM并不含有驱动,如要使用同样要设置前面提到的驱动)

     

    举例,英特网对此like查询有二种言论,如日中天种是利用like查询索引不可能见效,大器晚成种是选用like举办非最左前缀的查询索引不能够卓有功用;

        

    如有兴趣能够自行学习,那不是本文的爱抚。为轻巧起见,文中用的是mysql-connect-python。

    1. 普及编制程序语言的归类  :命令式语言、函数式语言、逻辑语言

    前后相继设计语言也能够分成4类:命令式语言、函数式语言、逻辑语言和面向对象的言语。。

    规范的sql 即对数据crud的sql,属于函数语言,然而sql的扩张部分,举个例子存款和储蓄进度之中的言语,越发周边命令式语言。

     

    自然,后面一个是不易的。mysql的btree索引只扶植最左前缀相称。但是你说它能设计为整个相配么,当然可以,例如接纳kmp算法进行子字符串相配。

       var result = from l1 in list1
                             join l2 in list2
                             on new { l1.Id, l1.Age } equals new { l2.Id, l2.Age }
                             select new
                             {
                                 l1Nmae=l1.Name ,
                                 l2Nmae=l2.Name 
                             };
    

    正则相称部分也比非常粗大略,因为源网页比较准则,如下网页图和呼应的源代码:

    1.1. 奉公守法编制程序语言的代际划分,又2gl,3gl,4gl,5gl   ,sql属于4gl

    1GL或第一代语言是机器语言大概机器能够直接实行的言语,也正是0和1结缘的串。

     2GL或第二代语言是汇编语言 

    3GL或第三代语言是风流倜傥种“高端”编制程序语言 

    4GL或第四代语言是比3GL更是临近于自然语言的言语。

     

    做客数据库的言语平常号称4GL。Java c# 那豆蔻年华类为3gl ,脚本语言常有的时候候呗称为三代半言语。。

     

    然而本人预计mysql的统一策动职员实际不想再追加btree索引设计的复杂程度了,或然怕减弱查询的功能(设子字符串长度为m,大字符串长度为n,相配的时间复杂度会从O(M)变为O(n m))。

      通过new {}equals new {}来经行多规格的联合的询问。然则必得小心的是,equals左侧的new中的字段个数和连串,和右边手的总得要合作,且是equalss左侧第三个字段相称右侧的第一个字段,由此及彼。

    新葡亰496net 1

    1.2. 遵纪守法世界范围可分为通用语言与dsl领域特定语言,sql语言属于dsl

    Dsl通常属于图灵不齐全的语言。。

     

       3,btree根本不协助此种查询。

      那样就贯彻了多规格的联合签字查询。

     

    2. 怎么样判别一门编制程序语言完备不完备,为啥脚本语言往往不齐全?

    诚如只要提供调用os的api,甚至能够操作硬件,及这么语言就非常齐全了。

     

     

    例如说,反向查询。你说作者的口径是哪些字段不等于xx,你把这些原则放到二叉找出树里面去探求,它根本就不通晓您想要查的多少在哪个子树上面。

     

    2.1. Sql语言又有个别内置函数?

    oracle中1十三个常用函数

    Mysql  貌似100多个,参考MySQL函数 - 逆心 - 博客园.html

     

    故而纵然使用索引,复杂度最坏的图景下也是O(n),跟不使用根本没分裂,所以这种情形也不会利用索引。

    新葡亰496net 2

    2.2. Sql语言中的变量与数据结构,非常多是表和视图风流洒脱类复合结构

    除开普通的字符串 数字变量,sql还帮助表,视图等繁缛变量,能够看做sql中的数据结构

     

       以上就是单表情况下索引无法见效的案由分析。

    直白用◎相称就可以。

    2.3. Sql知识图谱总结十七个分类,200个知识点。

    我:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

    捕鸟王"伯德 Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

    简单称谓:: EmirAttilax Akbar Emir 阿提拉克斯 Ake巴

    全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon Al Rapanui 

    Emir 阿提拉克斯 Ake巴 本 马哈茂德 本 阿提拉 本 Solomon  阿尔 拉帕努伊   

    常用名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

    转发请评释来源:attilax的专栏   

    --Atiend

     

     

    新葡亰496net,爬取某网站电影信息并写入mysql数据库,linq中如何实现多个条件的联合查询。除此以外还会有聚合索引以至多表联合检查时索引的应用。聚合索引mysql的管理很简单,

    程序运维完后,数据都写入movies表中。

    哪怕将多少个字段拼到一齐合为一个字段进行索引,因而索引中的第一个字段相当重大,假使查询条件中绝非第贰个字段,

    新葡亰496net 3

    聚合索引是不能够奏效的。至于多表联合检查,其实最应当消除的是涉及到的多寡数量,这些等小编切磋透顶了再说吧。

    比方说本人想筛选豆瓣评分>7的,

    新葡亰496net 4

    是还是不是很简短,你GET到了啊?

    本文由新葡亰496net发布于网络数据库,转载请注明出处:爬取某网站电影信息并写入mysql数据库,linq中如

    关键词: