用网络的思维看经济结构

从复杂网络看产业森林

Complex Theroy

Stock Market

Brain Network

Social Network

产业结构即产业总和

如汽车产业与上游产业:轮胎,汽油,钢铁

传统理论认为在一棵树附近总有另一颗树可以带到,因而森林结构不重要

Random Network :任意两个点的连续可能性是等概率的

相邻的点可以构成一个团簇,而事实表示,如果森林的各个区域性质明显不同,由相互连接的密集区域和相对隔离的区域组成,那么猴子可能终生被困在某个区域。

定义 个距离: $\quad \phi_{i, j}=\min \left{P\left(R C A x_{i} \mid R C A x_{j}\right), P\left(R C A x_{j} \mid R C A x_{i}\right)\right}$

$R C A_{c, i}=\frac{\frac{x(c, i)}{\sum_{i} x(c, i)}}{ \frac{x(c, i)}{\sum_{c} x(c, i)}{\sum_{c,i}x(c,i)}} $

产业森林里的大部分的连接非常稀疏(不连通),小总分产品是高度互联的,让我们得到一个高度模块化的网络地图。

数学分析基础简笔记(三)

极限的定义

数列极限/函数极限

想要任意近,只要足够近

定义:$lim_{x\to x_0}f(x)=L$

$\forall \varepsilon, \exists \delta$,使得 $\left|x-x_{0}\right|<\delta$时,有$|f(x)-L|<\varepsilon$

极限的四则运算与极限的复合

(1)加法:$lim_{x\to x_0}f(x)=L_1, lim_{x\to x_0}g(x)=L_2$, 则$ lim_{x\to x_0}f(x)+g(x)=L_1+L_2$,

$\forall \varepsilon, \exists \delta, s.t|f(x)+g(x)-(L_1+L_2)|<\varepsilon$

若$|f(x)-L_1|<\frac{\varepsilon}{2}$且 $|g(x)-L_2|<\frac{\varepsilon}{2}$

极限的复合

若$\lim {x \to x{0}} f(x)=L_{1} \lim {x \to L{1}} g(x)=l_{2}$,则 $\lim {x \to x{0}}g(f(x))=L_{2}$

数学分析基础简笔记(二)

无穷大之比较

当$n\in N$,$n\to \infty$时,$lnn<n^{\frac{1}{a_1}}<n<n^{a_2}<a_3^n<n!<n^n$

一、求证:$lim_{n\to \infty}\frac{n^{a_2}}{a_3^n}=0

二、求证:$a_3^n<n!$

Stirling近似

$n!\prox\sqrt{2\pi n}\left(\frac{n}{e}\right)^n$

对上述内容求倒数,即可比较无穷小

InfiniteScrollPager加载显示记录信息

<div class="text-right">第 <?=(isset($_GET['page'])?$_GET['page']-1:0)*20?>-<?=((isset($_GET['page'])?$_GET['page']:1)*20)>$pages->totalCount?$pages->totalCount:((isset($_GET['page'])?$_GET['page']:1)*20)?> 条, 共 <?=$pages->totalCount?> 条.</div>

数学分析基础简笔记(一)

戴金斯分划:

实数的定义:(1)划分到有理数;(2)分划点无理数;

实数的性质:(稠密性,)

单调有界序列存在极限定理:

实数元素的个数:

自然数个数=整数个数(等势)

希尔伯特旅馆:旅客住进住满人的旅馆

整数个数与有理个数相同:(寻找一 一对应)

可列(可数)

关于上一页与下一页实现细节

我想要把题库设计一下翻页功能,Mysql语句也很简单,在本地测试一点问题都没有,但是一放到服务器上便提示内存资源耗竭,最后在查看了一些资料后,在后面加了一个limit 1,如此便跑得飞快:

实现代码:

    public static function PrevQuestion($id,$uid=null,$testpaper=null)
    {
        $query = Question::find()->where(['<','id',$id]);

        if($uid)
        {
            $query->andWhere(['author'=>$uid]);
        }

        if($paper)
        {
            $query->LeftJoin('sq_testpaperinfo t','t.paper_id='.$paper_id);
        }

        $query->orderBy('id DESC');

        $query->limit(1);

        return $query->one();
    }

    public static function NextQuestion($id,$uid=null,$testpaper=null)
    {
        $query = Question::find()->where(['>','id',$id]);

        if($uid)
        {
            $query->andWhere(['author'=>$uid]);
        }

        if($paper)
        {
            $query->LeftJoin('sq_testpaperinfo t','t.paper_id='.$paper_id);
        }

        $query->orderBy('id DESC');
        $query->limit(1);

        return $query->one();
    }

下面是参考内容:

/**
* 获取当前记录的上一条记录
* @param seq
* @return
*/
@Select("select title, random_code from tb_blog where seq < ${seq} order by seq desc limit 1 ")
public Map<String,Object> getPreviousBlog(@Param("seq") long seq);

/**
* 获取当前记录的下一条记录
* @param seq
* @return
*/
@Select("select title, random_code from tb_blog where seq > ${seq} order by seq asc limit 1 ")
public Map<String,Object> getPostBlog(@Param("seq") long seq);

seq 是自增序列,random_code是id,title是博客标题。

seq不是主键,要使seq自增,先添加seq字段或建表时创建,再将seq添加unique索引,再使seq auto_increment,因为自增长列必须先是unique key或primary key。

python爬取试题信息-保存文本并利用正则表达式获取指定字段并保存mysql数据库

原文链接:https://blog.csdn.net/weixin_44648900/article/details/105196981

疫情期间无聊突发奇想想要做一个在线考试系统,目前已完成数据库设计,开始编写爬虫爬取试题数据,目标网站如下,获取内容包括:考点,试题,答案选项,答案,解析。考点字段的获取便于以后系统个性化推荐的需要。🚔

在这里插入图片描述
在这里插入图片描述

去除网页里获取时候遇到的脏数据

查看网页的时候发现这个东西,可能是他们后台有其他用途,由于直接匹配字段不方便,先把所有网页文本先获取再把class为this_jammer等中内容获取为停用词表,爬取的试题文本去掉这些脏数据就OK了。

在这里插入图片描述

下面保存脏数据表的函数

在这里插入图片描述
#-*-coding:utf-8-*-
import requests
from bs4 import BeautifulSoup
# import codecs
def get_url(target_url, server, headers):
    req = requests.get(target_url, headers=headers)
    bf = BeautifulSoup(req.text)
    div = bf.find_all('div', class_='questions_col')
    a_bf = BeautifulSoup(str(div[0]))
    a = a_bf.find_all('a')
    cheak_parsing_url = []
    for each in a:
        if each.string == "查看解析":
            full_url = server + each.get('href')
            cheak_parsing_url.append(full_url)
    print(cheak_parsing_url)
    return cheak_parsing_url

def change_page(target_url, server, headers):
    req = requests.get(target_url, headers=headers)
    bf = BeautifulSoup(req.text)
    div = bf.find_all('div', class_='fenye')
    a_bf = BeautifulSoup(str(div[0]))
    a = a_bf.find_all('a')
    full_url = None
    for each in a:
        if each.string == "下一页":
            full_url = server + each.get('href')
            print(full_url)
        else :
            continue
    return full_url

def get_html(url_list, file_path, headers):
    for url in url_list:
        req = requests.get(url, headers=headers)
        content = req.content.decode('utf-8','ignore')
        bf = BeautifulSoup(content, fromEncoding="gb18030")
        del_text = bf.find_all(class_=["this_jammer", "hidejammersa", "jammerd42"])
        for i in del_text:
            if i:
                new_tag = ""
                try:
                    i.string.replace_with(new_tag)
                except:
                    pass
        texts = bf.find_all('div', class_= 'answer_detail')
        try:
            texts = texts[0].text.replace('\xa0', '')
            texts = texts.replace(" ", "")
        except:
            pass
        try:
            texts = texts.replace("\n", '')
        except:
            pass
        print(texts)
        contents_save(file_path, texts)

def contents_save(file_path, content):
    """
    :param file_path: 爬取文件保存路径
    :param content: 爬取文本文件内容
    :return: None
    """
    with open(file_path, 'a', encoding="utf-8", errors='ignore') as f:
        try:
            f.write(content)
        except:
            pass
        f.write('\n')

def get_category(target_url, server, headers):
    req = requests.get(target_url, headers=headers)
    bf = BeautifulSoup(req.text)
    div = bf.find_all('div', class_='shiti_catagory frame')
    a_bf = BeautifulSoup(str(div[0]))
    a = a_bf.find_all('a')
    category = []
    for each in a:
        full_url = server + each.get('href')
        category.append(full_url)
    print(category)
    return category

if __name__ == "__main__":
    main_url = "https://tiku.21cnjy.com/tiku.php?mod=quest&channel=8&xd=3"
    server = "https://tiku.21cnjy.com/"
    save_dir = "/Users/lidongliang/Desktop/爬虫/data"
    subject_file = "1.txt"
    file_path = save_dir + '/' + subject_file
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
        'Accept-Encoding': 'gzip'}
    categorys = get_category(main_url, server, headers)
    for category_url in categorys:
        counting = 0
        target_url = category_url
        while counting < 100:
            cheak_parsing_url = get_url(target_url, server, headers)
            get_html(cheak_parsing_url, file_path, headers)
            target_url = change_page(target_url, server, headers)

            if target_url == None:
                break
            counting += 1

运行初步结果如下:

在这里插入图片描述

对文本进行正则匹配获取文本指定字段并保存到数据库

import re
import pymysql

w1 = 'A.'
w2 = 'B.'
w3 = 'C.'
w4 = 'D.'
w5 = '答案'
w6 = '解析试题分析:'
w7 = '考点'


def get_txt():
    with open("/Users/lidongliang/Desktop/爬虫/data/1.txt", "r") as f:
        txt = f.readlines()
        return txt


def fen(txt):
    # buff = txt.replace('\n','')
    timu = re.compile('^' + '(.*?)' + w1, re.S).findall(txt)
    A = re.compile(w1 + '(.*?)' + w2, re.S).findall(txt)
    B = re.compile(w2 + '(.*?)' + w3, re.S).findall(txt)
    C = re.compile(w3 + '(.*?)' + w4, re.S).findall(txt)
    D = re.compile(w4 + '(.*?)' + w5, re.S).findall(txt)
    daan = re.compile(w5 + '(.*?)' + w6, re.S).findall(txt)
    jiexi = re.compile(w6 + '(.*?)' + w7, re.S).findall(txt)
    kaodian = re.compile(w7 + '(.*?)' + '\Z', re.S).findall(txt)

    timu.extend(A)
    timu.extend(B)
    timu.extend(C)
    timu.extend(D)
    timu.extend(daan)
    timu.extend(jiexi)
    timu.extend(kaodian)

    # print(timu)

    try:
        tg = timu[0]
        xx = ("A:" + timu[1] + "B:" + timu[2] + "C:" + timu[3] + "D:" + timu[4])
        da = timu[5]
        fx = timu[6]
        kd = timu[7]
    except:
        tg = '1'
        xx = '1'
        da = '1'
        fx = '1'
        kd = '1'
    con = pymysql.connect(host='localhost', user='root', passwd='00000000', db='login_test_1', charset='utf8')
    cursor = con.cursor()
    sql = "insert into question_info(tg,xx,da,fx,kd) values('%s','%s','%s','%s','%s')" \
          % (tg, xx, da, fx, kd)
    cursor.execute(sql)
    con.commit()


if __name__ == "__main__":
    txt = get_txt()
    for i in txt:
        fen(i)
    print("done")

最后结果:

在这里插入图片描述

正则提取选项偶遇

<li class="list-group-item"><b>题文:</b>  4.已知某扇形的面积为<img src="/upload/word/57680275bcf0b6a839384c6480e0af36.png" style="height:auto">,若该扇形的半径<img src="/upload/word/d452629594b058b78eba1fe55eb3b5ac.png" style="height:auto">,弧长<img src="/upload/word/57b4da4d396ff14b1f76cd9c2d3b6254.png" style="height:auto">满足<img src="/upload/word/4e57454c31274c7e38b4450fcc89e3b1.png" style="height:auto">,则该扇形圆心角大小的弧度数是()
A.<img src="/upload/word/9d27aaaad550b71d8366a1dbc4f3fedA.png" style="height:auto"/>
B.<img src="/upload/word/80a9d43aae805fdd22361a7020614342.png" style="height:auto"/>
C.<img src="/upload/word/8ca1d7a7c4e997025fb882e90977f37b.png" style="height:auto"/>
D.<img src="/upload/word/9d27aaaad550b71d8366a1dbc4f3feda.png" style="height:auto"/>或<img src="/upload/word/80a9d43aae805fdd22361a7020614342.png" style="height:auto"/></li>

使用的正则表达示如下:

$pattern_options = "~(.*)A\.(.*)B\.(.*)C\.(.*)D\.(.*)~Si";		    
preg_match_all($pattern_options, $items[5][0], $option_matches);
$content = $option_matches[1][0];

但这个正则不能正确类似A选项中重复”A.”的问题,到底应该怎么写这个正则,才能正确匹配呢?

python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片

首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以

下面来看下如何解析docx文档:文档格式如下

有3个部分组成 1 正文:text文档 2 一个表格。 3一个插入的文件对象。4 一个图片 这4个部分是我们在docx文档中最常见的几种格式。解析代码如下

import docx

def docx_try():
    doc=docx.Document(r'E:\py_prj\test.docx')
    for p in doc.paragraphs:
        print p.text
    for t in doc.tables:
        for r in t.rows:
            for c in r.cells:
                print c.text

E:\python2.7.11\python.exe E:/py_prj/test3.py

Test文档

名称

作用

Python

解析数据

C语言

调用底层接口

HTML

网页数据

首先是用docx.Document打开对应的文件目录。docx文件的结构比较复杂,分为三层,1、Docment对象表示整个文档;2、Docment包含了Paragraph对象的列表,Paragraph对象用来表示文档中的段落;3、一个Paragraph对象包含Run对象的列表。 因此p.text会打印出整个的文本文档。而用doc.tables来遍历所有的表格。并且对每个表格通过遍历行,列的方式来得到所有的内容。

但是在运行结果中并没有找到我们插入的文件对象和图片,text.txt文档。这部分该如何解析呢。首先我们需要先来认识下docx文档的格式组成:

docx是Microsoft Office2007之后版本使用的,用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名扩展名后面添加了字母“x”(即“.docx”取代“.doc”、“.xlsx”取代“.xls”、“.pptx”取代“.ppt”)。

docx格式的文件本质上是一个ZIP文件。将一个docx文件的后缀改为ZIP后是可以用解压工具打开或是解压的。事实上,Word2007的基本文件就是ZIP格式的,他可以算作是docx文件的容器。

docx 格式文件的主要内容是保存为XML格式的,但文件并非直接保存于磁盘。它是保存在一个ZIP文件中,然后取扩展名为docx。将.docx 格式的文件后缀改为ZIP后解压, 可以看到解压出来的文件夹中有word这样一个文件夹,它包含了Word文档的大部分内容。而其中的document.xml文件则包含了文档的主要文本内容

从上面的文档我们可以了解到docx文档实际上是由XML文档打包组成的。那么我们要得到其中所有的部分,可以用ZIP解压的方式来得到所有的部件。我们先试下看是否可以

1 将docx文档改成ZIP的后缀

2 解压文件

解压之后得到如下几个文件

点开word文件夹:有如下的文件夹。document.xml就是描述文本对象的文件

其中embeddings文件中就是我们插入的文本对象text.txt. 是一个bin文件

Media文件中就是存储的图片:

我们通过手动的方式将插入的文本以及图片解析出来,那么通过代码也是同样可以解析的。代码如下。

os.chdir(r'E:\py_prj')  #首先改变目录到文件的目录
os.rename('test.docx','test.ZIP')  # 重命名为zip文件
f=zipfile.ZipFile('test.zip','r')  #进行解压
for file in f.namelist():
    f.extract(file)
file=open(r'E:\py_prj\word\embeddings\oleObject1.bin','rb').read() #进入文件路径,读取二进制文件。
for f in file:
    print f


通过上面的方式,就可以将docx中插入的文件以及图片全部解析出来。具体docx的写的方式可以参考官方文档的介绍