这一节主要介绍了requests、beautifulsoup、HTMLParser、数据库编程、登录问题和豆瓣数据爬取。

Requests库

import json
import requests
from PIL import Image
from io import BytesIO
print('dir(requests):', dir(requests))
url = 'http://www.baidu.com'
r = requests.get(url)print('r.text:', r.text)
print('r.status_code:', r.status_code)
print('r.encoding:', r.encoding)
dir(requests): ['ConnectTimeout', 'ConnectionError', 'DependencyWarning', 'FileModeWarning', 'HTTPError', 'NullHandler', 'PreparedRequest', 'ReadTimeout', 'Request', 'RequestException', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__build__', '__builtins__', '__cached__', '__copyright__', '__doc__', '__file__', '__license__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__title__', '__version__', 'adapters', 'api', 'auth', 'certs', 'codes', 'compat', 'cookies', 'delete', 'exceptions', 'get', 'head', 'hooks', 'logging', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'session', 'sessions', 'status_codes', 'structures', 'utils', 'warnings']
r.text: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-store">
<meta http-equiv="pragma" content="no-cache">
<script language="javascript">
var p=/\/index_([\d]+).html/;
var arr=p.exec(document.location);
if(arr[1])
{location="ac_detect.php?"+"ac_id="+arr[1]+"&"+document.location.search.substring(1);
}
</script>
</head>
</body>
</html>
r.status_code: 200
r.encoding: ISO-8859-1
# 传递参数:比如http://aaa.com?pageId=1&type=content
params = {'k1':'v1', 'k2':'v2'}
r = requests.get('http://httpbin.org/get', params)
print(r.url)
http://httpbin.org/get?k2=v2&k1=v1
# 二进制数据
r = requests.get('http://i-2.shouji56.com/2015/2/11/23dab5c5-336d-4686-9713-ec44d21958e3.jpg')
image = Image.open(BytesIO(r.content))
image.save('meinv.jpg')
# json处理
r = requests.get('https://github.com/timeline.json')
print(type(r.json))
print(r.text)
<class 'method'>
{"message":"Hello there, wayfaring stranger. If you’re reading this then you probably didn’t see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":"https://developer.github.com/v3/activity/events/#list-public-events"}
# 原始数据处理,流数据,读一点写一点。数据量大的情况下比较省内存
r = requests.get('http://i-2.shouji56.com/2015/2/11/23dab5c5-336d-4686-9713-ec44d21958e3.jpg', stream = True)
with open('meinv2.jpg', 'wb+') as f:for chunk in r.iter_content(1024):f.write(chunk)
# 提交表单
form = {'username':'user', 'password':'pass'}
r = requests.post('http://httpbin.org/post', data = form)
print(r.text)
r = requests.post('http://httpbin.org/post', data = json.dumps(form))
print(r.text)
{"args": {}, "data": "", "files": {}, "form": {"password": "pass", "username": "user"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "27", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.11.1"}, "json": null, "origin": "61.50.181.46", "url": "http://httpbin.org/post"
}{"args": {}, "data": "{\"username\": \"user\", \"password\": \"pass\"}", "files": {}, "form": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "40", "Host": "httpbin.org", "User-Agent": "python-requests/2.11.1"}, "json": {"password": "pass", "username": "user"}, "origin": "61.50.181.46", "url": "http://httpbin.org/post"
}
# cookie
url = 'http://www.baidu.com'
r = requests.get(url)
cookies = r.cookies
for k, v in cookies.get_dict().items():print(k, v)cookies = {'c1':'v1', 'c2': 'v2'}
r = requests.get('http://httpbin.org/cookies', cookies = cookies)
print(r.text)
BDORZ 27315
{"cookies": {"c1": "v1", "c2": "v2"}
}
# 重定向和重定向历史(用的不多)
r = requests.head('http://github.com', allow_redirects = True)
print(r.url)
print(r.status_code)
print(r.history)
https://github.com/
200
[<Response [301]>]
# 代理
proxies = {'http': ',,,', 'https': '...'}
r = requests.get('...', proxies = proxies)

BeautifulSoup

程序中使用到了’test.html’,内容如下:

<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
from bs4 import BeautifulSoup
soup = BeautifulSoup(open('test.html'), "lxml")
print(soup.prettify())  #格式规范化后
<html><head><title>The Dormouse's story</title></head><body><p class="title" name="dromouse"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>,<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>and<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p><p class="story">...</p></body>
</html>
# Tag
print(type(soup.title))
print(soup.title.name)
print(soup.title)
<class 'bs4.element.Tag'>
title
<title>The Dormouse's story</title>
# String
print(type(soup.title.string))
print(soup.title.string)
<class 'bs4.element.NavigableString'>
The Dormouse's story
# Comment
print(type(soup.a.string))
print(soup.a.string)
<class 'bs4.element.Comment'>Elsie
for item in soup.body.contents:print(item.name)
None
p
None
p
None
p
# CSS查询
print(soup.select('.sister'))
print(soup.select('#link1'))
print(soup.select('head > title'))
a_s = soup.select('a')
for a in a_s:print(a)
[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
[<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>]
[<title>The Dormouse's story</title>]
<a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>

HTMLParser

markupbase安装方法,直接’pip install’无法安装成功,尝试命令’pip search markupbase’得到包名’micropython-markupbase’,然后直接在网页上下载这个包,下载后里面有一个’_markupbase.py’文件,将文件名开头的’‘去掉后文件复制到python安装目录’\Lib\site-packages’下(如我的电脑’C:\Program Files\Anaconda3\Lib\site-packages’)

from HTMLParser import HTMLParser
# markupbaseclass MyParser(HTMLParser):       #继承基类来写自己的解析器,Sax模式def handle_decl(self, decl):HTMLParser.handle_decl(self, decl)print('decl %s' % decl)def handle_starttag(self, tag, attrs):HTMLParser.handle_starttag(self, tag, attrs)print('<' + tag + '>')def handle_endtag(self, tag):HTMLParser.handle_endtag(self, tag)print('</' + tag + '>')def handle_data(self, data):HTMLParser.handle_data(self, data)print('data %s' % data)#<br/>def handle_startendtag(self, tag, attrs):HTMLParser.handle_startendtag(self, tag, attrs)def handle_comment(self, data):HTMLParser.handle_comment(self, data)print('data %s' % data)def close(self):HTMLParser.close(self)print('Close')demo = MyParser()
demo.feed(open('test.html').read())
demo.close()
<html>
<head>
<title>
data The Dormouse's story
</title>
</head>
data <body>
data <p>
<b>
data The Dormouse's story
</b>
</p>
data <p>
data Once upon a time there were three little sisters; and their names were<a>
data  Elsie
</a>
data ,<a>
data Lacie
</a>
data  and<a>
data Tillie
</a>
data ;
and they lived at the bottom of a well.
</p>
data <p>
data ...
</p>
Close

sqlite

import sqlite3conn = sqlite3.connect('test.db')
create_sql = 'create table company(id int primary key not null, emp_name text not null);'
conn.execute(create_sql)
insert_sql = 'insert into company values(?, ?)'
conn.execute(insert_sql, (100, 'LY'))
conn.execute(insert_sql, (200, 'July'))
cursors = conn.execute('select id, emp_name from company')
for row in cursors:print(row[0], row[1])
conn.close()
100 LY
200 July

豆瓣爬虫

login_up

import requests
import html5lib
import re
from bs4 import BeautifulSoups = requests.Session()
url_login = 'http://accounts.douban.com/login'formdata = {'redir':'https://www.douban.com','form_email': 'liyanan001@yeah.net','form_password': 'xxxxxx','login': u'登陆'
}
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}r = s.post(url_login, data = formdata, headers = headers)
content = r.text
soup = BeautifulSoup(content, 'html5lib')
captcha = soup.find('img', id = 'captcha_image')
if captcha:captcha_url = captcha['src']re_captcha_id = r'<input type="hidden" name="captcha-id" value="(.*?)"/'captcha_id = re.findall(re_captcha_id, content)print(captcha_id)print(captcha_url)captcha_text = input('Please input the captcha:')formdata['captcha-solution'] = captcha_textformdata['captcha-id'] = captcha_idr = s.post(url_login, data = formdata, headers = headers)
with open('contacts.txt', 'w+', encoding = 'utf-8') as f:f.write(r.text)

login_cookie

chrome找cookie:
1.在网页任意地方右击选择’检查’或者按下 shift+ctrl+c打开chrome自带的调试工具,点击Network信息;
2.选择network标签,刷新网页(在打开调试工具的情况下刷新);
3.刷新后’Name’找到该网页url,点击 后右边选择headers,就可以看到当前网页的http头了,在requests headers里有cookie;

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}
cookies = {'cookie': 'bid=yziFQhTcZIQ; ps=y; ll="108288"; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1482927892%2C%22https%3A%2F%2Faccounts.douban.com%2Fsafety%2Fbind_resetpassword%3Fconfirmation%3Dd45af5b19bdc537f%26alias%3Dliyanan001%2540yeah.net%22%5D; ue="liyanan001@yeah.net"; dbcl2="76208527:9XkES3vv3uM"; ck=rRSb; __utmt=1; ap=1; push_noty_num=0; push_doumail_num=0; _pk_id.100001.8cb4=ea6d754ff65bcdd2.1474347257.6.1482929703.1481331480.; _pk_ses.100001.8cb4=*; __utma=30149280.2078507961.1473603369.1481331480.1482927892.8; __utmb=30149280.22.10.1482927892; __utmc=30149280; __utmz=30149280.1482927892.8.8.utmcsr=accounts.douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/safety/bind_resetpassword; __utmv=30149280.7620; _vwo_uuid_v2=EB8F16618A0E0BB2959FE9B0E842F251|8cdbe50b30acbb8304a6cfd0bdf4e501'}
url = 'http://www.douban.com'
r = requests.get(url, cookies = cookies, headers = headers)
with open('douban_2.txt', 'wb+') as f:f.write(r.content)

豆瓣爬电影数据

import requests
from lxml import etrees = requests.Session()
for id in range(0, 251, 25):url = 'https://movie.douban.com/top250/?start-' + str(id)r = s.get(url)r.encoding = 'utf-8'root = etree.HTML(r.content)items = root.xpath('//ol/li/div[@class="item"]')# print(len(items))for item in items:title = item.xpath('./div[@class="info"]//a/span[@class="title"]/text()')name = title[0].encode('gb2312', 'ignore').decode('gb2312')# rank = item.xpath('./div[@class="pic"]/em/text()')[0]rating = item.xpath('.//div[@class="bd"]//span[@class="rating_num"]/text()')[0]print(name, rating)
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1
肖申克的救赎 9.6
这个杀手不太冷 9.4
霸王别姬 9.5
阿甘正传 9.4
美丽人生 9.5
千与千寻 9.2
辛德勒的名单 9.4
泰坦尼克号 9.2
海上钢琴师 9.2
盗梦空间 9.2
机器人总动员 9.3
三傻大闹宝莱坞 9.1
放牛班的春天 9.2
忠犬八公的故事 9.2
大话西游之大圣娶亲 9.1
龙猫 9.1
教父 9.2
乱世佳人 9.2
楚门的世界 9.0
天堂电影院 9.1
当幸福来敲门 8.9
搏击俱乐部 9.0
触不可及 9.1
十二怒汉 9.3
指环王3:王者无敌 9.1

七月算法课程《python爬虫》第四课: 相关库使用与登录问题相关推荐

  1. Python爬虫入门四之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  2. python爬虫入门四:BeautifulSoup库(转)

    正则表达式可以从html代码中提取我们想要的数据信息,它比较繁琐复杂,编写的时候效率不高,但我们又最好是能够学会使用正则表达式. 我在网络上发现了一篇关于写得很好的教程,如果需要使用正则表达式的话,参 ...

  3. Python爬虫第四课:Network、XHR、json

    在爬虫实践当中,如果我们爬取的页面的编写没有做好板块的区分,或者我们选取的标签不合适,最终我们获得的结果会多提取到出一些奇怪的东西. 当使用用request获取的网页源代码里没有我们想要的数据时,需要 ...

  4. python爬虫(五)------pyquery库(一)------attr()、text()、html()、addClass()、hasClass()、removeattr()等方法

    python爬虫(四)------bs4库(二)------BeautifulSoup的findall().find(().select()和select_one()等方法 pyquery库 安装 p ...

  5. 数据结构与算法(Python)第四天

    数据结构与算法(Python)第四天 链表 双向链表 操作 实现 单向循环链表 操作 实现 栈 栈结构实现 操作 实现 队列 队列的实现 操作 实现 双端队列 操作 实现 链表 双向链表 一种更复杂的 ...

  6. python爬虫(四)数据存储

    python爬虫(四)数据存储 JSON文件存储 JSON是一种轻量级的数据交换格式,它是基于ECMAScript的一个子集 JSON采用完全独立于语言的文本格式 JSON在Python中分别由lis ...

  7. Python爬虫利器四之PhantomJS的用法

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 原文这篇文章讲解的纯PhantomJS的用法,讲得比较细致,具体可以跟Python也可以跟node等结合使用. ...

  8. Python爬虫【四】爬取PC网页版“微博辟谣”账号内容(selenium多线程异步处理多页面)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  9. Python爬虫(四)

    Python爬虫(四) 一.案例:爬取站长素材图片 # 需求 下载前十页的图片 # 第一页:https://sc.chinaz.com/tupian/qinglvtupian.html # 第二页:h ...

最新文章

  1. 目标检测——Faster R-CNN论文阅读
  2. Docker 部署SpringBoot项目不香吗?
  3. flume spooldir bug修复
  4. JAVA进阶day05包和权限
  5. 为什么注册页面刷新一次,数据库就多了一条数据?????
  6. android开发环境的调研
  7. gem install mysql2的时候出现的错误
  8. BLE芯片商总结和市场趋势分析
  9. 液压伺服控制技术和电液比例控制技术
  10. 2019冬季乙级考试
  11. 50 行代码,实现中英文翻译
  12. 计算机语言中下划线表示什么,下划线是什么
  13. 宝塔linux 搭建rtmp+ffmpeg转流直播服务器
  14. SQL Server下载和安装步骤
  15. Failed to connect to repository : Error performing git command: git.exe
  16. 今天520情人节,你确定不学一下「情话设计模式」?
  17. China Joy 还没看够?2020 谷歌游戏出海峰会带来更多精彩!
  18. Wallpaper Engine pkg壁纸文件提取工具
  19. 图片上传实时预览效果
  20. Java 代码实现 Liquibase 的基本使用方法

热门文章

  1. .doc文件转换为.docx文件
  2. 一个MM的八年“抗战”
  3. ppt文本框变成了图片怎么还原_电催化氮还原到底应该怎么做?来看看这个视频+PPT吧!...
  4. 引用CDN内容的方法总结
  5. 从苏宁电器到卡巴斯基第33篇:难忘的三年硕士时光 IX
  6. 计算机开机响3声,电脑开机三声短响是什么原因?如何解决?
  7. 乐蒙网:IE 浏览器进入死亡倒计时,Microsoft Edge 能否接过大旗?
  8. 中国式危机公关9加1策略(第十四章 国外危机应对案例參考)
  9. 我的世界java版好玩的种子_我的世界中有多少种种子?有哪些比较好玩?
  10. 2020年区块链和分布式账本技术的5大趋势