前端学习之html行内元素和块元素

首先说说行内元素(内联元素),行内元素只能显示在一行内,它不会因为一行放不下而进行换行。如:span就是一个行内元素。宽度(width)、高度(height)、内边距的top/bottom(padding-top/padding-bottom)和外边距的top/bottom(margin-top/margin-bottom)都不可改变,就是里面文字或图片的大小;

块元素与行内元素相反,一个块元素会自动在新的一行开始。如:h1,p都是块元素。宽度(width)、高度(height)、内边距(padding)和外边距(margin)都可控制;

通过css我们可以改变元素是块元素还是行内元素:

1. display: block;

2. display: inline;

3. display: inline-block;

行内元素列表

b, big, i, small, tt
abbr, acronym, cite, code, dfn, em, kbd, strong, samp, var
a, bdo, br, img, map, object, q, script, span, sub, sup
button, input, label, select, textarea

块元素列表

address , blockquote , center , dir , div , dl , fieldset , form , h1 , h2 , h3 , h4 , h5 , h6 , hr , isindex , menu , noframes , noscript , ol , p , pre , table , ul , li

Postgresql 基础命令的使用

本文介绍了Postgresql 最基础命令的使用。

访问数据库

1、列举数据库:\l

2、选择数据库:\c 数据库名

3、查看该某个库中的所有表:\dt

4、切换数据库:\c interface

5、查看某个库中的某个表结构:\d 表名

6、查看某个库中某个表的记录:select * from apps limit 1;

7、显示字符集:\encoding

8、退出psgl:\q

创建用户

创建 yy 用户, 密码为 yy , 创建 blogbase数据库,并对 yy 用户赋予所有权限

$ sudo su - postgres

$ psql

postgres=# CREATE USER yy WITH PASSWORD 'yy';

CREATE ROLE

postgres=# CREATE DATABASE blogbase;

CREATE DATABASE

postgres=# GRANT ALL PRIVILEGES ON DATABASE blogbase to yy;

GRANT

修改用户密码

alter user 用户名 with password’新密码’;

ALTER ROLE

登陆数据库

psql -U 用户名 -d 数据库名 -h 主机地址 -p 端口

重命名数据库

alter database blogbase rename to blogbase1;

查看状态

sudo /etc/init.d/postgresql status

启动

sudo /etc/init.d/postgresql start

停止

sudo /etc/init.d/postgresql stop

重启

sudo /etc/init.d/postgresql restart

 

用Python爬取妹子图所有大图

昨天我用python写了一个爬取妹子图网站图片的爬虫,是一个非常简陋的爬虫。
下边把我写的烂程序分享给大家,望给我做些评价。
我写的这个程序分为两个python文件,一个用来把图片文章的列表页网址给解析出来保存到一个python的list里边,并且用json库把这个list保存进一个json文件内。另一个python文件是用来解析并且下载图片文章详情页的所有大图。

GIF

第一个python文件(meizitu.py)

 

'''爬取“妹子图”http://www.meizitu.com/ 所有大图
1.列表页面:http://www.meizitu.com/a/more_1.html
*more_{num}.html其中num从1-72
*列表页小图链接在<div class="pic">下边(链接指向详情页面)
2.列表详情页面:http://www.meizitu.com/a/38.html
*{num}.html,其中num是详情页面的id
*大图在<div class="postContent">下边
*大图的img属性中有class="scrollLoading"我们就用这个属性来找到我们需要的图片
*文章标题在<div class="postmeta clearfix">下边
*我们把图片的文件名用文章标题加上数字进行重命名,另外去除标题中的空格和不符合文件名的符号
'''
import requests
from bs4 import BeautifulSoup
import json

list_link_num = 'http://www.meizitu.com/a/more_{num}.html'
list_link = [list_link_num.format(num=i) for i in range(1, 73)]
details_link = []

def get_list_index(list1, lists):
num = lists.index(list1) + 1
return num

def get_list_page_img_link(html):
soup = BeautifulSoup(html, 'lxml')
for link in soup.findAll('div', class_='pic'):
for a in link.findAll('a'):
details_link.append(a.attrs['href'])
print(len(details_link))

for link_list in list_link:
r = requests.get(link_list, headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'})
r.encoding = r.apparent_encoding
print('状态: %s\n' % r.status_code)
print('第 %d 个网页下载成功' %(get_list_index(link_list, list_link)))
get_list_page_img_link(r.text)

with open('./test.json', 'w') as f:
json.dump(details_link, f, indent=4)

f.close()

 

第二个文件(test.py)

import json
import requests
from bs4 import BeautifulSoup
import time

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}
download_path = 'd://image//'
download_count = 1
#link = []
with open('./test.json', 'r') as f:
link = json.load(f)

f.close()
#print(link)

def writeImage(path, img):
with open(path, 'wb') as f:
f.write(img)
f.close()

for a in link:
r = requests.get(a, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
for img_parent in soup.findAll('div', id='picture'):
for img in img_parent.findAll('img'):
print('正在下载第: %d 张美女的图片' % download_count)
img_link = img.attrs['src']
img_name_list = img_link.split('/')
img_file_name = img_name_list[-4] + img_name_list[-3] + img_name_list[-2] + img_name_list[-1]
#time.sleep(1)
try:
r_img = requests.get(img_link, headers=headers, timeout=10)
r_img.raise_for_status()
except:
print('链接异常')
path = download_path + img_file_name
writeImage(path, r_img.content)
print('第:%d 张美女的图片已下载完成, 赶快去看看吧!' % download_count)
download_count += 1
#print('还剩%d 张没有下载' % len(img_parent.findAll('img')) - download_count)

 

下载后存储的json文件(test.json)

这个文件的内容就不分享了,因为太长了有将近3000行。

图片一共爬取了1.5万多张。

Flask 第三方插件导入方法

我遇到的问题
我在Flask运行是的问题就是,每次运行python manage.py runserver是都会显示一些警告信息,从提示可以看到只是警告信息,并不是错误信息。Google了以下原来是版本不同导致的兼容性问题,解决的办法就是使用新的导入方式即可。

旧的第三方插件导入方式

from flask.ext.sqlalchemy import SQLAlchemy

我们可以在ipython里查看第三方包的包名,按照包名导入即可。

Flask 的项目架构

(flask_env) fy@fy-Box:~/py_project/blog$ tree
.
├── app
│   ├── blog
│   │   ├── errors.py
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── errors.cpython-35.pyc
│   │   │   ├── __init__.cpython-35.pyc
│   │   │   └── views.cpython-35.pyc
│   │   └── views.py
│   ├── __init__.py
│   ├── __pycache__
│   │   └── __init__.cpython-35.pyc
│   ├── static
│   │   ├── css
│   │   ├── img
│   │   └── js
│   └── templates
│   ├── 404.html
│   ├── 500.html
│   ├── base.html
│   └── blog
│   └── index.html
├── config.py
├── manage.py
├── __pycache__
│   └── config.cpython-35.pyc
└── requirements.txt

11 directories, 16 files

app 目录

app 目录是Flask 的应用目录,里边包括templates\static和一些蓝图,蓝图可以有多个,但这里只有blog一个,蓝图里就是一些视图函数。

app/init.py
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy

# 导入配置文件
from config import config

bootstrap = Bootstrap()
db = SQLAlchemy()

def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)

bootstrap.init_app(app)
db.init_app(app)

# Bluerpint
from .blog import blog as blog_blueprint
app.register_blueprint(blog_blueprint)
return app

blog/config.py

import os

base_dir = os.path.abspath(os.path.dirname(__file__))

class Config(object):
'''
Base Config
'''
SECRET_KEY = 'ABCDEFG'
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
SQLALCHEMY_TRACK_MODIFICATIONS = True

@staticmethod
def init_app(app):
pass

class DevConfig(Config):
'''
Development Config
'''
DEBUG = True
HOST = '0.0.0.0'
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(base_dir, 'data-dev.sqlite')

config = {
'development': DevConfig,
'default': DevConfig
}

blog/manage.py

import os
from app import create_app
from flask_script import Manager

app = create_app('default')
manage = Manager(app)

if __name__ == '__main__':
manage.run()

app/blog/init.py

from flask import Blueprint

blog = Blueprint('blog', __name__)

from . import views, errors

app/blog/errors.py

from flask import render_template
from . import blog

@blog.app_errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404

@blog.app_errorhandler(500)
def internal_server_error(e):
return render_template('500.html'), 500

app/blog/views.py

from flask import render_template

from . import blog

@blog.route('/')
def index():
return render_template('blog/index.html')
templstes/base.html
{% extends "bootstrap/base.html" %}
{% block title %}疯影{% endblock %}

{% block content %}
<div class="container">
{% block page_content %}base.html{% endblock %}
</div>
{% endblock content %}

 

 

今天写了个C语言字符转ASCII码的程序

void ascii(void) {
  /**************************
  * 字符转换ASCII码
  ***************************/
  char a='0'; // 给a一个初始化值
  while (1) {
    if (a != 10) {// 当a不等于LF换行时才打印输出提示
      printf("请输入一个字符(或输入q退出):");
    }
    scanf("%c", &a);
    if (a != 10) {
      printf("%c -> %d\n", a, a);
    }
    
    if (a == 'q') {
      break;
    }
  }
}

 

c语言逻辑运算符

下表显示了 C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:

  1. && 称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A && B) 为假。
  2. || 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。A || B) 为真。
  3. ! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。

代码:

#include <stdio.h>
 
main()
{
   int a = 5;
   int b = 20;
   int c ;
 
   if ( a && b )
   {
      printf("Line 1 - 条件为真\n" );
   }
   if ( a || b )
   {
      printf("Line 2 - 条件为真\n" );
   }
   /* 改变 a 和 b 的值 */
   a = 0;
   b = 10;
   if ( a && b )
   {
      printf("Line 3 - 条件为真\n" );
   }
   else
   {
      printf("Line 3 - 条件不为真\n" );
   }
   if ( !(a && b) )
   {
      printf("Line 4 - 条件为真\n" );
   }
}

结果:

Line 1 - 条件为真
Line 2 - 条件为真
Line 3 - 条件不为真
Line 4 - 条件为真

 

c语言a++与++a的区别

c语言a++与++a的区别,两者的区别就是先赋值后运算和先运算后赋值。

代码:

#include <stdio.h>
 
int main()
{
   int c;
   int a = 10;
   c = a++; 
   printf("先赋值后运算:\n");
   printf("Line 1 - c 的值是 %d\n", c );
   printf("Line 2 - a 的值是 %d\n", a );
   a = 10;
   c = a--; 
   printf("Line 3 - c 的值是 %d\n", c );
   printf("Line 4 - a 的值是 %d\n", a );
 
   printf("先运算后赋值:\n");
   a = 10;
   c = ++a; 
   printf("Line 5 - c 的值是 %d\n", c );
   printf("Line 6 - a 的值是 %d\n", a );
   a = 10;
   c = --a; 
   printf("Line 7 - c 的值是 %d\n", c );
   printf("Line 8 - a 的值是 %d\n", a );
 
}

结果:

先赋值后运算:
Line 1 - c 的值是 10
Line 2 - a 的值是 11
Line 3 - c 的值是 10
Line 4 - a 的值是 9
先运算后赋值:
Line 5 - c 的值是 11
Line 6 - a 的值是 11
Line 7 - c 的值是 9
Line 8 - a 的值是 9

 

c 语言常量的使用

常量是C语言程序设计中经常用到的一种基础数据类型,比如Pi = 3.1415926, 可以定义一个Pi的常量,这样在需要修改常量时只需要修改定义的常量值就行了,不必要直接赋值’字面值’。

常量的最主要特性就是值不可变,记住这点就行了。

C 语言中的几种常量类型

1. 整数常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

整数常量例子

212         /* 合法的 */
215u        /* 合法的 */
0xFeeL      /* 合法的 */
078         /* 非法的:8 不是八进制的数字 */
032UU       /* 非法的:不能重复后缀 */

85         /* 十进制 */
0213       /* 八进制 */
0x4b       /* 十六进制 */
30         /* 整数 */
30u        /* 无符号整数 */
30l        /* 长整数 */
30ul       /* 无符号长整数 */

2. 浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。

浮点常量的实例:

3.14159       /* 合法的 */
314159E-5L    /* 合法的 */
510E          /* 非法的:不完整的指数 */
210f          /* 非法的:没有小数或指数 */
.e55          /* 非法的:缺少整数或分数 */

3. 字符常量

字符常量是括在单引号中,例如,’x’ 可以存储在 char 类型的简单变量中。

字符常量可以是一个普通的字符(例如 ‘x’)、一个转义序列(例如 ‘\t’),或一个通用的字符(例如 ‘\u02C0’)。

在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。下表列出了一些这样的转义序列码:

转义序列	含义
\\	\ 字符
\'	' 字符
\"	" 字符
\?	? 字符
\a	警报铃声
\b	退格键
\f	换页符
\n	换行符
\r	回车
\t	水平制表符
\v	垂直制表符
\ooo	一到三位的八进制数
\xhh . . .	一个或多个数字的十六进制数

定义常量

把常量定义为大写字母形式,是一个很好的编程实践。

方法1:使用 #define 预处理器

#include <stdio.h>
 
#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'
 
int main()
{
 
   int area;  
  
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);
 
   return 0;
}

方法2:使用 const 关键字

#include <stdio.h>
 
int main()
{
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = '\n';
   int area;  
   
   area = LENGTH * WIDTH;
   printf("value of area : %d", area);
   printf("%c", NEWLINE);
 
   return 0;
}