A Song of Python and Anaconda


  • Startseite

  • Archiv

  • Tags

推荐使用requests代替urllib【python】

Veröffentlicht am 2016-09-15

说明:之前爬虫时读取网址内容用的都是urllib,这是python自带的,但如果使用复杂点的功能,还是推荐requests第三方库,这是因为这个库很优秀

1、比较,参考自: http://www.jb51.net/article/63711.htm:

一个复杂一点的例子:
现在让我们尝试下复杂点得例子:使用GET方法获取http://foo.test/secret的资源,这次需要基本的http验证。使用上面的代码作为模板,好像我们只要把urllib2.urlopen() 到requests.get()之间的代码换成可以发送username,password的请求就行了
这是urllib2的方法:

import urllib2
url = ‘http://example.test/secret‘
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, url, ‘dan’, ‘h0tdish’)
auth_handler = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
response = urllib2.urlopen(url)
response.getcode()
200
response.read()
‘Welcome to the secret page!’
一个简单的方法中实例化了2个类,然后组建了第三个类,最后还要装载到全局的urllib2模块中,最后才调用了urlopen,那么那两个复杂的类是什么的
迷惑了吗, 这里所有urllib2的文档 http://docs.python.org/release/2.7/library/urllib2.html

那Requests是怎么样解决同样的问题的呢?
Requests

import requests
url = ‘http://example.test/secret‘
response = requests.get(url,auth=(‘dan’,’h0tdish’))
response.status_code
200
response.content
u’Welcome to the secret page!’
只是在调用方法的时候增加了一个auth关键字函数

2、requests的documents官网: http://www.python-requests.org/en/master/
建议阅读下其documents,写的还是挺清楚的。

3、基本使用:
import requests
r = requests.get(‘https://api.github.com/events‘)
r.text
r.content # 以字节的方式访问请求响应体,对于非文本请求

r = requests.post(‘http://httpbin.org/post‘, data = {‘key’:’value’})

百度百科1000个页面数据的抓取【python】

Veröffentlicht am 2016-09-14

说明:以下内容学习自:http://www.imooc.com/

1、首先要感谢原作者非常细致的讲解,在网页分析的时候还是学到了一些很有用的技巧。后续会总结。

2、这次是跟着作者,使用了Eclipse + Pydev的软件调试的,相对于Pycharm,他的优点就是可以动态插入需要的类和方法,而同比Pycharm只能动态匹配类,方法就没反应了。不过在界面配色方面明显没有Pyhcarm做的好。总之,目前的配色方案不满意,但将就下吧。

3、原作者使用的Python 2的版本,我的版本(大部分还是照作者的)已经修改到3的版本了,。虽然感觉作者的代码,有的地方写的有点小啰嗦,不过看他视频现场操作,还是感觉细节有很多值得借鉴的地方。

# -*- coding: utf-8 -*-
# python 3.5.2

from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import re
import urllib


class HtmlOutputer(object):
    def __init__(self):
        self.datas = []

    def collect_data(self, data):
        if data is None:
            return
        self.datas.append(data)

    def outputer_html(self):
        fout = open('output.html', 'w')
        fout.write("<html>")
        fout.write("<body>")
        fout.write("<table>")

        # accii
        for data in self.datas:
            fout.write("<tr>")
            fout.write("<td>%s</td>" % data['url'])
            # 原作者使用了.encode('utf-8')的代码,但在python 3 测试报错
            fout.write("<td>%s</td>" % data['title']).encode('utf-8')
            fout.write("<td>%s</td>" % data['summary']).encode('utf-8')

            fout.write("</tr>")

        fout.write("</body>")
        fout.write("</table>")
        fout.write("</html>")
        fout.close()


class HtmlParser(object):
    def _get_new_urls(self, page_url, soup):
        new_urls = set()
        # /view/123.htm
        links = soup.find_all('a', href=re.compile(r'/view/\d+\.htm'))
        for link in links:
            new_url = link['href']

            new_full_url = urllib.parse.urljoin(page_url, new_url)
            new_urls.add(new_full_url)
        return new_urls

    def _get_new_data(self, page_url, soup):
        # http://baike.baidu.com/view/21087.htm
        res_data = {}
        res_data['url'] = page_url
        # <dd class="lemmaWgt-lemmaTitle-title"><h1>Python</h1>
        title_node = soup.find('dd', class_="lemmaWgt-lemmaTitle-title").find("h1")
        res_data['title'] = title_node.get_text()

        # <div class="lemma-summary" label-module="lemmaSummary">
        summery_node = soup.find('div', class_="lemma-summary")
        res_data['summery'] = summery_node.get_text()

        return res_data

    def parse(self, page_url, html_cont):
        if page_url is None or html_cont is None:
            return
        soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='uft-8')
        new_urls = self._get_new_urls(page_url, soup)
        new_data = self._get_new_data(page_url, soup)

        return new_urls, new_data


class HtmlDownloader(object):
    def download(self, url):
        if url is None:
            return None

        response = urlopen(url)
        if response.getcode() != 200:
            return None
        return response.read()


class UrlManager(object):
    def __init__(self):
        self.new_urls = set()
        self.old_urls = set()

    def add_new_url(self, url):
        if url is None:
            return
        if url not in self.new_urls and url not in self.old_urls:
            self.new_urls.add(url)

    def add_new_urls(self, urls):
        if urls is None or len(urls) == 0:
            return
        for url in urls:
            self.add_new_url(url)

    def has_new_url(self):
        return len(self.new_urls) != 0

    def get_new_url(self):
        new_url = self.new_urls.pop()
        self.old_urls.add(new_url)
        return new_url




class SpiderMain(object):
    def __init__(self):
        # url 管理器
        self.urls = UrlManager()
        # 下载器
        self.downloader = HtmlDownloader()

        # 解析器
        self.parser = HtmlParser()

        # 输出器
        self.outputer = HtmlOutputer()

    def craw(self, root_url):
        count = 1
        # 入口url添加
        self.urls.add_new_url(root_url)

        # 如果有新的url
        while self.urls.has_new_url():
            try:

                # 获取新的url
                new_url = self.urls.get_new_url()
                print('craw %d : %s' % (count, new_url))

                # 启动下载器下载页面
                html_cont = self.downloader.download(new_url)

                # 解析器来解析新的地址和数据
                new_urls, new_data = self.parser.parse(new_url, html_cont)

                # 把新的地址添加到urls
                self.urls.add_new_urls(new_urls)

                # 输出和收集数据
                self.outputer.collect_data(new_data)

                if count == 1000:
                    break
                count += 1
            except:
                print('craw failed.')

        # 输出数据
        self.outputer.outputer_html()


if __name__ == "__main__":
    root_url = "http://baike.baidu.com/view/21087.htm"
    # 创建一个爬虫对象
    obj_spider = SpiderMain()
    # 运行爬虫函数
    obj_spider.craw(root_url)

4、原作者是的html_outputer.py 文件包含了3个函数,最后一个是把爬虫数据导出到一个.html文件里,但是按照他的源代码,最后我总是得到错误提示如下,提示整数不能用来encode,也就是爬到的百科名词有的是纯数字的,比如设想是10086 ,另外在python 2 到3 的切换使用中,也确实遇到好几在V2 下ok的代码,到了V3失败,很多是来自解码方面的异常。:

AttributeError: ‘int’ object has no attribute ‘encode’

或者当去掉utf-8输出,又遇到gbk编码的问题:
UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\u02c8’ in position 19: illegal multibyte sequence

5、总结:

  • 首先,原作者在一个工程下,建立一个package,然后把几个主要的类单独列出了py文件,这样的方式更为规范,此文为粘贴代码简便,统一到了一起。实际,应用第一种模式为佳。

  • 其次,在分析html的分类入口处,比如python关键词地方的对应html代码,使用右键–>检查(或F12,然后点击上面有“类”的地方,比如此文是关键词python在类lemmaWgt-lemmaTitle-title下的h1标题,然后再右键–>Edit as html,就可以在一个段落里轻松复制这断html代码了。否则在F12模式下不能直接上下复制的)

  • 经过比较python 2, 如果检索的关键词是数字,一样不能使用.encode(‘utf-8’), 那么原作者的演示视频为何都没有报错? 这应该是他当时的爬虫没有搜寻到数字关键词,而我的遇到了。

pdf的读取【python】

Veröffentlicht am 2016-09-13

说明:以下内容学习自:http://www.imooc.com/

1、使用pdfminer3k,如果直接pip安装非常卡导致失败,所以去https://pypi.python.org/pypi/pdfminer3k/ 用迅雷下载后,在对应路径,用python setup.py install 来安装。

2、在下载文件的docs文件夹下有一个index.html,里面有 PDFMiner API相关的说明,操作流程如下2个图:

3、示范代码:

__author__ = 'Administrator'
# python 3.5.2

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator

# 获取文档对象,以二进制读的模式。
fp = open('naacl06-shinyama.pdf', 'rb')

# 创建一个与文档关联的parser
parser = PDFParser(fp)

# pdf文档的对象
doc = PDFDocument()

# 连接解释器和文档对象
parser.set_document(doc)
doc.set_parser(parser)

# 初始化文档
doc.initialize('')

# 创建pdf资源管理器
resource = PDFResourceManager()

# 创建参数分析器
laparam = LAParams()

# 创建一个聚合器
device = PDFPageAggregator(resource, laparams=laparam)

# 创建一个页面解释器
interpreter = PDFPageInterpreter(resource, device)

#使用文档对象从页面读取内容
for page in doc.get_pages():
    # 使用页面解释器来读取
    interpreter.process_page(page)

    # 使用聚合器来获取内容
    layout = device.get_result()

    for out in layout:
        if hasattr(out, 'get_text'):
            print(out.get_text())

4、结果展示,读取了示范pdf的几乎所有文字,不包括一些图,表格公式等复杂的:

7、总结:如果需要写论文什么的,感觉还是挺有用的,作者提到了还有一些更高级的功能,不过没有展开,有点可惜,另外pdfminer3k的最后更新时间2012/07/20,貌似作者停止更新了。而一个朋友反馈:pdf解析器和修改器现在最好的应该是一个JAVA库,还有一个就是Adobe和foxit提供的API。

Ubuntu下操作Django时的大杂烩【python】

Veröffentlicht am 2016-09-13

说明:以下内容学习自:http://www.imooc.com/

1、首先记录一个遇到的问题,一开始vi编辑模式下按方向键会变成ABCD,ubuntu下 vi输入方向键会变成ABCD,这是ubuntu预装的是vim tiny版本,安装vim full版本即可解决。先卸载vim-tiny:

$ sudo apt-get remove vim-common

再安装vim full:

$ sudo apt-get install vim

2、倒腾了半天,总算把vi的命令模式和插入模式搞明白了。搜索是“?+关键词”,下一个是字母:“n”,还有很多命令,可参考这里:http://www.cnblogs.com/emanlee/archive/2011/11/10/2243930.html
, 一开始因为第一条中记录的问题,导致一直输入错误。

3、遇到问题:
第一个电脑上,用pip isntall django后运行正常,第二个就报错 找不到django-admin 后来改用sudo apt install python-django才可以,不过貌似版本不是1.10.1的最新版,而是1.8.7的。

4、Show Intention Actions : 视频教程快速插入类和函数用的Ctrl+1的快捷键?查了下pycharm是Alt+Enter,但是明显这个设置要比Ctrl+1的模式反人类。 直接在setting–>Keymap 搜索Alt竟然找不到的,原来他是按照左边的名次来搜索的,Show Intention Actions,本来想给他按照视频教程的快捷键修改,但是发现可以用鼠标双击的模式来定义,并且检测没有冲突,这下甚好。但问题又来了,只能自动识别类,不能识别下面的方法,而这一点上,Eclipse+pydev倒是做的很好。

5、一个意外的发现: pycharm能在console调用ipython,而且带了显示函数的功能,如下图,问题是我忘记怎么把他调用出来了。:

把维基百科首页词条的数据导入mysql以及读取操作【Python】

Veröffentlicht am 2016-09-13

说明:以下内容学习自:http://www.imooc.com/

1、此文是跟着上一篇来写的,之前,已经完成了对维基百科词条的数据采集工作。

2、本文和作者示范不同的地方是,建立数据库和表格的工具我维持使用了sqlyog软件,作者用的是哪个不确定,因为视频看不清上面的名字。

3、代码如下,已经有一定说明,原作者可没提供代码哦,请把password对应的密码部分,从xxxx修改成你的真实数据库密码:

__author__ = 'Administrator'
# coding:utf-8
# 运行在python 3.5.2

import re
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs
import pymysql.cursors

# 使用urllib的urlopen方法,去打开维基百科的首页,读取,并用utf-8解码
resp = urlopen('https://en.wikipedia.org/wiki/Main_Page').read().decode('utf-8')

# 使用BeautifulSoup去解析,其中html.parser是默认的解析器
soup = bs(resp, 'html.parser')
# 获取所有的/wiki/开头的a标签的href属性。
listUrls = soup.find_all('a', href=re.compile(r'^/wiki/'))
print(listUrls)

# 输出所有的词条对应的名称和URL
for url in listUrls:
    # 排除.jpg JPG结尾的
    if not re.search('\.(jpg|JPG)$', url['href']):
        # 显示名称和网址的格式
        # string只能显示一个,而get_text()可显示标签下所有的文字。
        print(url.get_text(), '<---->', 'https://en.wikipedia.org'+url['href'])
        # 得到数据库的连接
        connection = pymysql.connect(host='localhost',
                               user='root',
                               password='XXXX',
                               db='wikiurl',
                               charset='utf8'
                               )

        try:
            # 创建会话指针
            with connection.cursor() as cursor:
                # 创建sql语句
                sql = 'insert into `urls` (`urlname`, `urlhref`) values(%s, %s)'
                # 执行sql语句
                cursor.execute(sql, (url.get_text(), 'https://en.wikipedia.org' + url['href']))
                # 提交
                connection.commit()

        finally:
            connection.close()

4、其中关键的步骤有:

A):sqlyog中表格的制作和设置,千万注意,id的int类型,需要添加自增,否则运行程序会报错: “Field ‘id’ doesn’t have a default value

B)数据库的插入和执行命令,因为不太熟悉,对着视频敲代码都错误了几次,并且要注意以下代码urls (urlname, urlhref)使用的是Tab键上面的那个上点号

C)当程序没有报错,在sqlyog查看表格要先刷新

D)在之前的帖子,是在python2.7下,通过sqlyog的import MySQLdb 来操作mysql的,并且,代码中的密码对应的是passwd,而这个和直接用python 运行pymysql的对应命令password是不同的,要分清楚。

5、结果图,有一丝喜悦感:

6、读取操作: 代码中,需要导入的包,和写入数据库的想同,主要的差别是读取数据需要额外的命令,比如,fetchall,fetchmany(size=n)这样的。相关读取的代码如下:

# 运行在python 3.5.2


import pymysql.cursors

connection = pymysql.connect(host='localhost',
                       user='root',
                       password='XXXX',
                       db='wikiurl',
                       charset='utf8'
                       )

try:
    # 创建会话指针
    with connection.cursor() as cursor:
        # 创建需要查询数据的sql语句
        sql = 'select `urlname`, `urlhref` from `urls` where `id` is not null'
        # 执行sql语句,计算数据库的总数量
        count = cursor.execute(sql)
        print(count)
        # 查询数据
        result = cursor.fetchmany(size=3)
        #result = cursor.fetchall()
        print(result)


finally:
    connection.close()

7、总结: 无乱是写入还是读取数据库,总流程基本为:

  • 导入巡行所需要的包,比如import pymysql.cursors
  • 连接数据库,填写必要的数据库登录信息,和表格信息,编码信息等。
  • 定义绘画指针和需要操作的数据库语句
  • 执行相关操作,比如写入,查询等。其中写入操作还需要执行cursor.commit() 来完成提交。
  • 最后,无论如何,都要在finnally中执行connection.close()来关闭数据库。

维基百科首页词条的爬取【Python】

Veröffentlicht am 2016-09-13

说明:以下内容学习自:http://www.imooc.com/

1、首先这个教程使用了V3的python,作者也讲到了一些功能函数,在V2不支持,经过测试,比如,urllib在V2就没有.request方法,实际上,网上反馈已经把urllib2合并到urllib中了。考虑到以后v3总会代替掉v2, 咱也升级算了。 顺便把win7也换成了win10, 貌似开机速度比win7还快。

2、直接上代码吧,加了中文注释,和视频教程大同小异的:之前的代码都是在sublime或者cmder里面操作,可发现换到V3以后,一个print在sublime中断报错提示,可完全一样的代码我用ipython又可以运行,好诧异。
所以,最后我干脆跑到pycharm去调试的。

__author__ = 'Administrator'
# coding:utf-8

import re
from urllib.request import urlopen
from bs4 import BeautifulSoup as bs

# 使用urllib的urlopen方法,去打开维基百科的首页,读取,并用utf-8解码
resp = urlopen('https://en.wikipedia.org/wiki/Main_Page').read().decode('utf-8')

# 使用BeautifulSoup去解析,其中html.parser是默认的解析器
soup = bs(resp, 'html.parser')
# 获取所有的/wiki/开头的a标签的href属性。
listUrls = soup.find_all('a', href=re.compile(r'^/wiki/'))
print(listUrls)

# 输出所有的词条对应的名称和URL
for url in listUrls:
    # 排除.jpg JPG结尾的
    if not re.search('\.(jpg|JPG)$', url['href']):
        # 显示名称和网址的格式
        # string只能显示一个,而get_text()可显示标签下所有的文字。
        print(url.get_text(), '<---->', 'https://en.wikipedia.org'+url['href'])

3、win10遇到的问题:
MP出错,提示awesomium_v1.6.5异常,好在MP能提示到官网提供awesomium_v1.6.6_sdk_win.exe的下载,第一次安装失败,卡机,后重启Win10修复。

4、方法总结:

  • urllib相关函数得到网址和解码;
  • bs4进行解析,可使用默认的解析器或者lxml等解析器;
  • 根据要求和RE规则,找到所有的地址列表
  • for循环后加工

5、结果展示:网址直接可打开对应的wiki信息哦。

6、PS:作者提到的chrome插件postman通过翻墙下了最新版,看下载量和5星评级应该不错,不过暂时我还没体验到他的威力,以后有感悟的话,再更新。

正则式学习小结

Veröffentlicht am 2016-09-11

说明:以下内容学习自:http://www.imooc.com/

由于这个视频教程已经说的比较详细,请参考原视频教程,这里为总结

1、简介:为何需要正则表达式,为了减少根据不同需求不断编制函数的麻烦,通过制定正则式规则,可以巧妙且有效的进行归纳总结。

2、Python的RE模块,RE是正则表达式的英文首字母缩写。最常用的就是re.match()函数了,其次是ma.group(),用来查阅匹配结果。

3、【重点】RE的语法:

4、 RE其他模块:

  • search(pattern, string, flags=0) 用来查找满足pattern的第一个返回值。
  • findall(pattern, string, flags=0)用来查找满足pattern的所有返回值。
  • sub(pattern, repl, string, count=0, flags=0)将字符串中匹配正则表达式的部分替代为其他值,并允许引入函数模式来进行替代。
  • split(pattern, string, maxsplit=0, flags=0)根据匹配分割字符串,返回分割字符串组成的列表。

5、练习,抓取慕课网的http://www.imooc.com/course/list的图片。主要流程为:

  1. 抓取网页,
  2. 获取图片地址,
  3. 抓去图片内容并保存到本地,

结果如下:

6、源代码:

import re
import urllib2

test_url = 'http://www.imooc.com/course/list'
req = urllib2.urlopen(test_url)
buf = req.read()
print buf

listurl = re.findall(r'http:.+\.jpg', buf)
print listurl

i = 0
for url in listurl:
    f = open(str(i)+'.jpg', 'w')
    req = urllib2.urlopen(url)
    buf = req.read()
    f.write(buf)
    i += 1

7、PS,再一次的,发现在Win下的结果出现乱码,而且抓的图片也是,而在Linux下是正常的。得找下原因。

Python操作MySQL数据库

Veröffentlicht am 2016-09-11

说明:以下内容学习自:http://www.imooc.com/

简介:本课程讲解Python如何开发MySQL数据库程序。首先介绍Python开发数据库程序的通用接口规范,然后搭建Python开发数据库程序的开发环境,接着了解了通用接口规范中的connection、cursor两大对象之后,介绍如何增删改查数据库,最后以实例代码演示数据库程序的开发流程。

1、教程说到以下网址http://sourceforge.net/projects/mysql-python下载mysql-pyhon 的连接器,针对python2.7的。 一开始安装失败,提示找不到python,原来此台电脑我的python 是64位的,貌似那个连接器是针对32位的,所有我又到以下网址下载了64位的连接器: http://www.codegood.com/download/11/
这下就能识别到python了, 但是一看版本是1.2.3的,而最新版是1.2.5的,考虑到mysql 5.6默认的msi也是32位的,我就把python 2.7.12换到了32位统一下吧。 安装成功后,在python下输入如下命令会成功,否则报错:

>>> import MySQLdb
>>>

2、然后根据教程要使用sqlyog,官网卡机,只好装国内版本,我用的这个连接(Ultimate 版本: (终极是最好的)): http://www.liangchan.net/soft/download.asp?softid=6633&downid=8&id=6658

随后在sqlyog新建一个数据库,并设置下utf8编码,如下图:

3、编写一个imooc.py 来建立connection连接,千万注意代码中的密码对应的是passwd,而不是全称的password哦。

4、通过connection来创建游标对象cursor:

5、select查询数据

6、数据库 I U D 操作:

7、sqlyog的表单操作,要创建2个列就要在新建的表中,增加2个属性,如下图:

8、同时推荐W3C的SQL教程,地址是: http://www.w3school.com.cn/sql/index.asp

9、刚发现这个帖子也有写的比较详细,可参考

CSS基础学习小结

Veröffentlicht am 2016-09-09

说明:以下内容学习自:http://www.w3school.com.cn/

1、简介:由于两种主要的浏览器(Netscape 和 Internet Explorer)不断地将新的 HTML 标签和属性(比如字体标签和颜色属性)添加到 HTML 规范中,创建文档内容清晰地独立于文档表现层的站点变得越来越困难。
为了解决这个问题,万维网联盟(W3C),这个非营利的标准化联盟,肩负起了 HTML 标准化的使命,并在 HTML 4.0 之外创造出样式(Style)。

2、选择器:selector {declaration1; declaration2; … declarationN } 以及分组和继承。

3、id选择器和类选择器,在Html基础学习的帖子已经接触了。

4、如何插入样式表:

A) 外部样式表,浏览器会从文件 mystyle.css 中读到样式声明,并根据它来格式文档。

<head>
<link rel="stylesheet" type="text/css" href="mystyle.css" />
</head>

B)内部样式表 当单个文档需要特殊的样式时,就应该使用内部样式表。你可以使用 style标签在文档头部定义内部样式表.

<head>
<style type="text/css">
  hr {color: sienna;}
  p {margin-left: 20px;}
  body {background-image: url("images/back40.gif");}
</style>
</head>

C) 内联样式,慎用
D)多重样式

5、背景,CSS 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果。CSS 在这方面的能力远远在 HTML 之上。

背景色:

p {background-color: gray;}

背景图,下例的flower定义的一个类被引用到了段落P:

p.flower {background-image: url(/i/eg_bg_03.gif);}

6、文本操作: 
缩进,注意参数可设置为负数,有“悬挂缩进”的作用:

p {text-indent: 5em;}
p {text-indent: -5em; padding-left: 5em;}

水平对齐:

text-align:center 
justify

字间隔等,其他略

p.spread {word-spacing: 30px;}

7、列表,和html的列表类似,但在style先加载了text/css和ul.disc:

<head>
<style type="text/css">
ul.disc {list-style-type: disc}
</style>
</head>

<body>
<ul class="disc">
<li>咖啡</li>
<li>茶</li>
<li>可口可乐</li>
</ul>

其中,设置表格颜色的部分,感觉要记录下,因为看上去比默认的好看不少,举例如下。代码【点我】:

查找mysql相关来到慕课网学习

Veröffentlicht am 2016-09-09

说明:以下内容学习自:http://www.imooc.com/

1、在研究别人一个关于用“mysql+爬虫”分析一个网站的时候,发现对mysql不熟悉,之前研究Django的时候用的是Postgresql数据库,所以打算学下mysql。然后官网最新版5.7,下载后找网络教程,发现有一个视频教程是5.5版本的,竟然5.7一个系统文件对不上,根本没有啊。 后来发现5.7版本有一些更新,不确定是否此原因导致。随后咨询了那篇文章的作者,他用的是5.6版本,那就装5.6,然后就想卸载5.7吧,结果又发现mysql的安装文件好多,一个个是单独安装的,那么要卸载可以一个个来,感觉麻烦,然后下载了官网的5.6.msi版本,点安装,出来一个界面提示已经装好的相关文件,可以用remove操作,随后有个全选的就可以全部统一卸载5.7的相关文件了,方便些。

2、突然感觉这自我学习的过程就像在打RPG游戏,跌跌撞撞,一个个关卡,每个小细节都可能带来很多烦恼,白天还在为mysql 5.7的如何配置一些utf8发愁呢。

3、对慕课网其实早进听说一直没去过,搜到@车神的一篇:《python遇见数据采集》,随后又根据他的介绍,打算再学下要求的3个基础,如下图,然后发现,原来第一个的《Python入门》是廖雪峰在这里的视频教程,以前可一直在他网站看的文字版的,竟然也不在他自己网站介绍下视频教程地址的,真是低调。

4、突然发现电脑超级卡,一看C盘的50G已经满了,这是什么鬼? 原来是virtualbox 安装的系统全部塞在了C盘,由于ubuntu系统也要不断安装一些库,导致历史占用的空间越来越多。所以,设置virtualbox的安装路径到E盘,重新做了一个虚拟系统,这样C盘的空间就释放了。

5、然后看了下正则式的知识,总结到下一篇吧。

1…456…8
Van

Van

71 Artikel
© 2017 Van
Erstellt mit Hexo
Theme - NexT.Muse