孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档...
孤荷凌寒自學(xué)python第七十九天開(kāi)始寫(xiě)Python的第一個(gè)爬蟲(chóng)9
?
(完整學(xué)習(xí)過(guò)程屏幕記錄視頻地址在文末)
?
今天在上一天的基礎(chǔ)上繼續(xù)完成對(duì)我的第一個(gè)代碼程序的書(shū)寫(xiě)。
到今天終于完成了對(duì)docx模塊針對(duì)word文檔的段落對(duì)象的操作的學(xué)習(xí),并通過(guò)函數(shù)封裝,使得可以輕松一點(diǎn)直接向word文檔中添加一個(gè)或多個(gè)段落文本并且設(shè)置段落的格式。
?
一、完成了批量添加word文檔段落的函數(shù)
```
def addPToDocx(f,strp,strfont='宋體',fontsize=14,fontcolor=RGBColor(0,0,0),stralign='左對(duì)齊',strlinespacingstyle='固定值',intlinespace=20,intlinespacebefore=0,intlinespaceafter=0,intfirstlineindent=100000,isShowMsg=False):
??? try:
??????? lst=strp.split('\n')
??????? for i in lst:
??????????? i.strip()
??????????? try:
??????????????? stralign=stralign.lower()
??????????????? strlinespacingstyle=strlinespacingstyle.upper()
??????????????? strfont.decode('utf-8')
??????????? except:
??????????????? pass
??????????? #---先指定樣式------------------------
??????????? styles = f.styles
??????????? fls=time.time()
??????????? strr='ghlhStyle%s' %fls? #自定義的樣式的名稱
??????????? strr=strr.replace('.','')
??????????? strr=strr+ ''.join(random.sample('zyxwvutsrqponmlkjihgfedcbaABCDEFGHIJKLMNOPQRST',5))
??????????? s=styles.add_style(strr,WD_STYLE_TYPE.PARAGRAPH)
??????????? s.font.name=strfont
??????????? s.font.size=Pt(fontsize)
??????????? s.font.color.rgb=fontcolor
??????????? s._element.rPr.rFonts.set(qn('w:eastAsia'), strfont) #除中文外其它文字 使用的字體 ,備選項(xiàng)
??????????? #----選擇正確的行距模式------------------------
??????????? if strlinespacingstyle in '固定值,EXACTLY,固定行距,固定行間距':
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.EXACTLY #段落行距樣式為固定值,必須指定行距值,否則就會(huì)變成 多倍行距 模式
??????????? elif strlinespacingstyle in '多行行距,多倍行距,多行距,MULTIPLE':
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.MULTIPLE #多倍行距,此模式的具體行間距由文字字號(hào)大小決定,如果后面指定了行距值,此多倍行距設(shè)置會(huì)被忽略,變成固定值模式
??????????? elif strlinespacingstyle in '單行行距,單倍行距,單行距,SINGLE':
??????? ????????s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.SINGLE #段落行距樣式為單倍行距 模式
??????????? elif strlinespacingstyle in '1.5行距,1.5倍行距,一行半行距,一行半倍行距,一點(diǎn)五行距,一點(diǎn)五倍行距,ONE_POINT_FIVE':
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.ONE_POINT_FIVE #段落行距樣式為 1.5倍行距 模式
??????????? elif strlinespacingstyle in '雙行行距,雙倍行距,雙行距,兩行行距,兩倍行距,兩行距,二行行距,二倍行距,二行距,DOUBLE':
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.DOUBLE #段落行距樣式為 雙倍行距 模式
??????????? else:
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.AT_LEAST #段落行距樣式為 最小行距 模式
?
??????????? s.paragraph_format.line_spacing=Pt(intlinespace) #行距值
??????????? s.paragraph_format.space_before=Pt(intlinespacebefore) #段前距
??????????? s.paragraph_format.space_after=Pt(intlinespaceafter) #段后距
?
??????????? if intfirstlineindent==100000:
??????????????? #--這個(gè)形參的默認(rèn)值表示,首行自動(dòng)縮進(jìn)兩個(gè)字符寬度
??????????????? s.paragraph_format.first_line_indent=s.font.size * 2 #段落首行縮進(jìn)量
??????????? else:
??????????????? s.paragraph_format.first_line_indent=Pt(intfirstlineindent) #這時(shí)直接使用設(shè)置值
??????????? #-------------------------------
??????????? p=f.add_paragraph(i)
??????????? p.style=s #--指定剛才自定義的樣式
??????????? #---接下來(lái)可調(diào)整對(duì)齊方式----
??????????? if stralign in '靠左對(duì)齊,左邊對(duì)齊,左側(cè),left':
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.LEFT #水平左對(duì)齊
??????????? elif stralign in '居中對(duì)齊,中間對(duì)齊,center':
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.CENTER #水平居中對(duì)齊
??????????? elif stralign in '靠右對(duì)齊,右邊對(duì)齊,右側(cè),right':
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.RIGHT #水平右對(duì)齊
??????????? elif stralign in '分散對(duì)齊,兩邊對(duì)齊,兩側(cè)對(duì)齊,兩頭對(duì)齊,頭尾對(duì)齊,justify':
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.JUSTIFY #水平分散對(duì)齊
??????????? else:
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.DISTRIBUTE
?
??????? return True
??? except Exception as e:
??????? mwordErrString='嘗試將來(lái)自網(wǎng)頁(yè)的內(nèi)容寫(xiě)入word文檔正文時(shí)出錯(cuò):' + str(e) + '\n此函數(shù)由【孤荷凌寒】創(chuàng)建,QQ578652607'
??????? if isShowMsg==True:
?????????? msgbox(mwordErrString)
??????? return False
??? else:
??????? pass
??? finally:
??????? pass
?
```
?
二、自定義文件【_mword.py】至此的文件內(nèi)容如下:
?
?
```
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import string
import time
import random
?
from docx.enum.style import WD_STYLE_TYPE #所有樣式 (包括段落、文字、表格)的枚舉常量集
?
from docx.enum.text import WD_ALIGN_PARAGRAPH #對(duì)齊方式 的枚舉常量集,不過(guò)在vscode中顯示有錯(cuò),事實(shí)又能夠執(zhí)行
?
from docx.enum.text import WD_LINE_SPACING #行間距的單位枚舉常量集(包括:單倍行距,1.5倍行距,固定 值,最小值等)
?
from docx.oxml.ns import qn
from docx import *
?
from docx.shared import Inches #設(shè)置word中相關(guān)內(nèi)容的計(jì)量單位為:英寸
from docx.shared import Pt? #設(shè)置word中相關(guān)內(nèi)容的計(jì)量單位為:磅
?
from docx.shared import RGBColor #將三個(gè)數(shù)值生成色彩對(duì)象
?
import _mty
import _cl #常用常量模塊
import _mre
?
mwordErrString=''
?
def msgbox(info,titletext='孤荷凌寒的word模塊對(duì)話框QQ578652607',style=0,isShowErrMsg=False):
??? return _mty.msgboxGhlh(info,titletext,style,isShowErrMsg)
?
def newDocX(strfilenm,isShowMsg=False):
??? '''
??? 創(chuàng)建一個(gè)新的docx并保存在指定的路徑下成為指定文件名的文件 。
??? '''
??? try:
??????? f=Document() #創(chuàng)建新文檔 對(duì)象
??????? f.save(strfilenm) #保存這個(gè)文件
??????? return f #f的類型是:<class 'docx.document.Document'>
??? except Exception as e:
??????? mwordErrString='嘗試創(chuàng)建一個(gè)新的word文件時(shí)出錯(cuò):' + str(e) + '\n此函數(shù)由【孤荷凌寒】創(chuàng)建,QQ578652607'
??????? if isShowMsg==True:
?????????? msgbox(mwordErrString)
??????? return None
??? else:
??????? pass
??? finally:
??????? pass
?
def addPToDocx(f,strp,strfont='宋體',fontsize=14,fontcolor=RGBColor(0,0,0),stralign='左對(duì)齊',strlinespacingstyle='固定值',intlinespace=20,intlinespacebefore=0,intlinespaceafter=0,intfirstlineindent=100000,isShowMsg=False):
??? try:
??????? lst=strp.split('\n')
??????? for i in lst:
??????????? i.strip()
??????????? try:
??????????????? stralign=stralign.lower()
??????????????? strlinespacingstyle=strlinespacingstyle.upper()
??????????????? strfont.decode('utf-8')
??????????? except:
??????????????? pass
??????????? #---先指定樣式------------------------
??????????? styles = f.styles
??????????? fls=time.time()
??????????? strr='ghlhStyle%s' %fls? #自定義的樣式的名稱
??????????? strr=strr.replace('.','')
??????????? strr=strr+ ''.join(random.sample('zyxwvutsrqponmlkjihgfedcbaABCDEFGHIJKLMNOPQRST',5))
??????????? s=styles.add_style(strr,WD_STYLE_TYPE.PARAGRAPH)
??????????? s.font.name=strfont
??????????? s.font.size=Pt(fontsize)
??????????? s.font.color.rgb=fontcolor
??????????? s._element.rPr.rFonts.set(qn('w:eastAsia'), strfont) #除中文外其它文字 使用的字體 ,備選項(xiàng)
??????????? #----選擇正確的行距模式------------------------
??????????? if strlinespacingstyle in '固定值,EXACTLY,固定行距,固定行間距':
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.EXACTLY #段落行距樣式為固定值,必須指定行距值,否則就會(huì)變成 多倍行距 模式
??????????? elif strlinespacingstyle in '多行行距,多倍行距,多行距,MULTIPLE':
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.MULTIPLE #多倍行距,此模式的具體行間距由文字字號(hào)大小決定,如果后面指定了行距值,此多倍行距設(shè)置會(huì)被忽略,變成固定值模式
??????????? elif strlinespacingstyle in '單行行距,單倍行距,單行距,SINGLE':
??????? ????????s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.SINGLE #段落行距樣式為單倍行距 模式
??????????? elif strlinespacingstyle in '1.5行距,1.5倍行距,一行半行距,一行半倍行距,一點(diǎn)五行距,一點(diǎn)五倍行距,ONE_POINT_FIVE':
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.ONE_POINT_FIVE #段落行距樣式為 1.5倍行距 模式
??????????? elif strlinespacingstyle in '雙行行距,雙倍行距,雙行距,兩行行距,兩倍行距,兩行距,二行行距,二倍行距,二行距,DOUBLE':
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.DOUBLE #段落行距樣式為 雙倍行距 模式
??????????? else:
??????????????? s.paragraph_format.line_spacing_rule=WD_LINE_SPACING.AT_LEAST #段落行距樣式為 最小行距 模式
?
??????????? s.paragraph_format.line_spacing=Pt(intlinespace) #行距值
??????????? s.paragraph_format.space_before=Pt(intlinespacebefore) #段前距
??????????? s.paragraph_format.space_after=Pt(intlinespaceafter) #段后距
?
??????????? if intfirstlineindent==100000:
??????????????? #--這個(gè)形參的默認(rèn)值表示,首行自動(dòng)縮進(jìn)兩個(gè)字符寬度
??????????????? s.paragraph_format.first_line_indent=s.font.size * 2 #段落首行縮進(jìn)量
??????????? else:
??????????????? s.paragraph_format.first_line_indent=Pt(intfirstlineindent) #這時(shí)直接使用設(shè)置值
??????????? #-------------------------------
??????????? p=f.add_paragraph(i)
??????????? p.style=s #--指定剛才自定義的樣式
??????????? #---接下來(lái)可調(diào)整對(duì)齊方式----
??????????? if stralign in '靠左對(duì)齊,左邊對(duì)齊,左側(cè),left':
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.LEFT #水平左對(duì)齊
??????????? elif stralign in '居中對(duì)齊,中間對(duì)齊,center':
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.CENTER #水平居中對(duì)齊
??????????? elif stralign in '靠右對(duì)齊,右邊對(duì)齊,右側(cè),right':
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.RIGHT #水平右對(duì)齊
??????????? elif stralign in '分散對(duì)齊,兩邊對(duì)齊,兩側(cè)對(duì)齊,兩頭對(duì)齊,頭尾對(duì)齊,justify':
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.JUSTIFY #水平分散對(duì)齊
??????????? else:
??????????????? p.alignment=WD_ALIGN_PARAGRAPH.DISTRIBUTE
?
??????? return True
??? except Exception as e:
??????? mwordErrString='嘗試將來(lái)自網(wǎng)頁(yè)的內(nèi)容寫(xiě)入word文檔正文時(shí)出錯(cuò):' + str(e) + '\n此函數(shù)由【孤荷凌寒】創(chuàng)建,QQ578652607'
??????? if isShowMsg==True:
?????????? msgbox(mwordErrString)
??????? return False
??? else:
??????? pass
??? finally:
??????? pass
?
```
?
三、測(cè)試用文件:
import requests
from bs4 import BeautifulSoup
import re
import datetime
import pymongo
?
from docx.shared import RGBColor #將三個(gè)數(shù)值生成色彩對(duì)象
?
import _mty
import _mf
import _mbs4
import _mmongo
import _mre
import _mdb
import _mword
?
intc=0
?
def msgbox(info,titletext='孤荷凌寒的DB模塊對(duì)話框QQ578652607',style=0,isShowErrMsg=False):
??? return _mty.msgboxGhlh(info,titletext,style,isShowErrMsg)
?
def myfirst(s,h):
?
??? c2=_mdb.conLocaldbGhlh(r'C:\ProgramData\SQLITE3\slone.s3db')
??? lstNm=['id','title','newdate','source','content','adddate']
??? lstType=['int','string','date','str','memo','date']
??? lstLong=[0,255,0,255,0,0]
??? lstNull=['not null','not null','not null','null','not null','null']
??? lstPrimary=[True,False,False,False,False,False]
??? lstAuto=[True,False,False,False,False,False]
?
??? c3=_mdb.conLocaldbGhlh(r'C:\ProgramData\SQLITE3\new163.accdb')
?
??? strt='news163'
??? a=_mdb.newTablePlusGhlh('sqlite',c2,strt,lstNm,lstType,lstLong,lstNull,lstPrimary,lstAuto)
??? msgbox(str(a))
??? cursor=c2.cursor()
?
??? b=_mdb.newTablePlusGhlh('acc',c3,strt,lstNm,lstType,lstLong,lstNull,lstPrimary,lstAuto)
??? cursor3=c3.cursor()
?
??? cursor.execute('select * from ' + strt + ';')
??? data=cursor.fetchall()
??? for i in data:
??????? msgbox(str(i))
?
??? cursor3.execute('select * from ' + strt + ';')
??? data=cursor3.fetchall()
??? for i in data:
??????? msgbox(str(i))
?
??? #return True
?
??? #-------------------------
??? r=requests.get(s,headers=h)
??? #print(r.text) #r.text得到的是頁(yè)面源html代碼
??? _mf.writeAllTextToTxtFileGhlh('1.txt',r.text)
??? bs=BeautifulSoup(r.text,features="lxml") #第二個(gè)參數(shù)指明了解析器,得到的是一個(gè)beautifulsoup對(duì)象
??? s=bs.prettify()
??? _mf.writeAllTextToTxtFileGhlh('2.txt',str(s))
??? rs=bs.select('.bigsize') #選擇指定style樣式表的html標(biāo)簽元素
??? for i in rs:
??????? ele=i.find_all('a') #每個(gè)h5標(biāo)簽下只有一個(gè)a標(biāo)簽
??????? strls=ele[0].get('href')
??????? #msgbox(strls) #取出地址
??????? getcontentpage(strls,h,c2,cursor,c3,cursor3,strt)
??????? #break
??? #---------------------
??? #cursor.execute('select * from ' + strt + ';')
??? #data=cursor.fetchall()
??? #for i in data:
??? #??? msgbox(str(i))
?
??? #cursor3.execute('select * from ' + strt + ';')
??? #data=cursor3.fetchall()
??? #for i in data:
??? #??? msgbox(str(i))
???
?
def getcontentpage(strurl,h,c2,cursor,c3,cursor3,strt):
??? r=requests.get(strurl,headers=h)
??? _mf.writeAllTextToTxtFileGhlh('3.txt',r.text)
??? bs=BeautifulSoup(r.text,features="lxml") #第二個(gè)參數(shù)指明了解析器,得到的是一個(gè)beautifulsoup對(duì)象
??? s=bs.prettify()
??? _mf.writeAllTextToTxtFileGhlh('4.txt',str(s))
??? #---------------------------
??? #eletemp=bs.find_all("#epContentLeft") #現(xiàn)在eletemp是一個(gè)rs集合對(duì)象
??? #上一句是錯(cuò)誤的,通過(guò)html標(biāo)簽對(duì)象的id值來(lái)查找應(yīng)當(dāng)使用的方法是:select方法
??? eletemp=bs.select('#epContentLeft') #list
??? #msgbox(str(type(eletemp)))
??? eletitleparent=eletemp[0] #bs.element.Tag
??? #msgbox(str(type(eletitleparent)))
??? eletitle=eletitleparent.h1
??? elesource=eletitleparent.div #elesource這種對(duì)象現(xiàn)在被稱為:bs.element.Tag對(duì)象,可以被轉(zhuǎn)換為列表,但不是列表
??? #msgbox(str(elesource))
??? strtitle=_mbs4.getAllTextGhlh(eletitle)
??? strdate=list(elesource)[0]
??? strdate=_mre.getDateAndTimeString(strdate)
??? strsource=_mbs4.getAllTextGhlh(elesource.a)
??? #msgbox(strtitle)
??? #msgbox(strsource)
??? #msgbox(strdate)
??? #取正文
??? elecontent=bs.select('#endText') #所有的正文內(nèi)容都這個(gè)div中,elecotent是一個(gè)List?
??? strcontent=_mbs4.getAllTextGhlh(elecontent)
??? data={
??????? u'標(biāo)題':strtitle,
??????? u'日期':strdate,
??????? u'來(lái)源':strsource,
??????? u'內(nèi)容':strcontent,
??????? u'添加日期':datetime.datetime.now().__format__('%Y-%m-%d %H:%M:%S')
??? }
??? #msgbox(str(data))
?
??? #寫(xiě)入Mongodb數(shù)據(jù)庫(kù)
??? c=_mmongo.conMongoDbGhlh('localhost')
??? db=c.news163
??? jh=db.first
??? isok=_mmongo.addNewDataGhlh(jh,data)
??? #msgbox(isok)
??? #寫(xiě)入sqlite3和ACCESS數(shù)據(jù)庫(kù)
??? try:
??????? strsql="insert into " + strt + "(title,newdate,source,content,adddate) values('" + strtitle + "','" + strdate + "','" + strsource + "','" + strcontent + "','" + datetime.datetime.now().__format__('%Y-%m-%d %H:%M:%S') + "');"
??????? cursor.execute(strsql)
??????? cursor3.execute(strsql)
?
??????? c2.commit()
??????? c3.commit()
??? except:
??????? msgbox('出錯(cuò)了')
?
??? #寫(xiě)入word文檔
??? try:
??????? global intc
??? ????intc=intc+1
??????? strf='%03d' %intc
??????? strf=strf + '.docx'
??????? strf='I:\\MAKEAPP\\python\\Python365\\邊學(xué)習(xí)邊測(cè)試文件夾\\自學(xué)PYTHON部分\\0079第七十九天爬蟲(chóng)實(shí)戰(zhàn)9\\docs\\' + strf
??????? f=_mword.newDocX(strf)
??????? _mword.addPToDocx(f,strtitle,'黑體',28,RGBColor(0,0,100),'l','1.5',0,0,20,0)
??????? #f.add_heading(strtitle,level=2) #這是添加標(biāo)題段的方式 添加
??????? #f.add_heading(strsource,level=3)
??????? _mword.addPToDocx(f,strcontent)
?
??????? f.save(strf) #保存時(shí)必須有文件名作參數(shù)
??????? #f.close() #沒(méi)有這個(gè)命令
?
??? except:
??????? msgbox('寫(xiě)word出錯(cuò)!')
??????? pass
?
strurl='http://tech.163.com/special/techscience/'
header={
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate',
'Accept-Language':'zh-CN,zh;q=0.9',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Cookie':'_ntes_nuid=4c64ad6c80e3504f05302ac133efb277; _ntes_nnid=eb7c24e0daf48e922e31dc81e431fde2,1536978956105; Province=023; City=023; NNSSPID=acab5be191004a2b81a3a6ee60f516dc; NTES_hp_textlink1=old; UM_distinctid=1683adcaeaf2f8-0e31bcdad8532c-3c604504-144000-1683adcaeb094d; vjuids=-7a5afdb26.1683adccded.0.d9d34439a4e48; vjlast=1547175776.1547175776.30; ne_analysis_trace_id=1547175775731; s_n_f_l_n3=7476c45eb02177f91547175775852; vinfo_n_f_l_n3=7476c45eb02177f9.1.0.1547175775852.0.1547176062972',
'Host':'tech.163.com',
'If-Modified-Since':'Fri, 11 Jan 2019 03:01:05 GMT',
'Referer':'http://tech.163.com/',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
?
header2={
??? 'Host':'tech.163.com',
??? 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
?
myfirst(strurl,header2)
?
四、今天的其它收獲小結(jié):
(一)、在docx模塊操作word文檔時(shí),添加自定義樣式的方法:
新的自定義樣式對(duì)象=word文檔對(duì)象.styles.add_style('新樣式命名',WD_STYLE_TYPE.PARAGRAPH)
?
然后將【新的自定義樣式對(duì)象】賦值給段落對(duì)象的.style屬性即可
word文檔段落對(duì)象的.style=新的自定義樣式對(duì)象
而不能在新增段落時(shí),像使用word的內(nèi)置樣式那樣在新增段落的第二個(gè)參數(shù)中傳入這個(gè)新的樣式對(duì)象的名稱。
這種方法只對(duì)word的內(nèi)置樣式有效,自定義樣式如果也這樣做,將報(bào)錯(cuò)。
?
(二)、隨機(jī)文本的生成方法
1.得到一個(gè)字符串中的隨機(jī)字符
random.choice('字符串')
此方法將返回【字符串】中的一個(gè)隨機(jī)字符。
2.得到一個(gè)字符串中的多個(gè)隨機(jī)字符,返回列表
random.sample('字符串',要返回的個(gè)數(shù))
或者:
random.sample([字符串列表], 要返回的個(gè)數(shù))
這兩個(gè)方法都將返回【要返回的個(gè)數(shù)】個(gè)來(lái)自于【字符串】中或【字符串列表】中的字符。
?
?
——————————
今天整理的學(xué)習(xí)筆記完成,最后例行說(shuō)明下我的自學(xué)思路:
根據(jù)過(guò)去多年我自學(xué)各種編程語(yǔ)言的經(jīng)歷,認(rèn)為只有真正體驗(yàn)式,解決實(shí)際問(wèn)題式的學(xué)習(xí)才會(huì)有真正的效果,即讓學(xué)習(xí)實(shí)際發(fā)生。在2004年的時(shí)候我開(kāi)始在一個(gè)鄉(xiāng)村小學(xué)自學(xué)電腦 并學(xué)習(xí)vb6編程語(yǔ)言,沒(méi)有學(xué)習(xí)同伴,也沒(méi)有高師在上,甚至電腦都是孤島(鄉(xiāng)村那時(shí)還沒(méi)有網(wǎng)絡(luò)),有的只是一本舊書(shū),在痛苦的自學(xué)摸索中,我找到適應(yīng)自己零基礎(chǔ)的學(xué)習(xí)方法:首先是每讀書(shū)的一小節(jié)就作相應(yīng)的手寫(xiě)筆記,第二步就是上機(jī)測(cè)試每一個(gè)筆記內(nèi)容是否實(shí)現(xiàn),其中會(huì)發(fā)現(xiàn)書(shū)中講的其實(shí)有出入或錯(cuò)誤,第三步就是在上機(jī)測(cè)試之后,將筆記改為電子版,形成最終的修訂好的正確無(wú)誤的學(xué)習(xí)筆記 。
通過(guò)反復(fù)嘗試錯(cuò)誤,在那個(gè)沒(méi)有分享與交流的黑暗時(shí)期我摸黑學(xué)會(huì)了VB6,爾后接觸了其它語(yǔ)言,也曾聽(tīng)過(guò)付費(fèi)視頻課程,結(jié)果發(fā)現(xiàn)也許自己學(xué)歷果然太低,就算是零基礎(chǔ)的入門(mén)課程,其實(shí)也難以跟上進(jìn)度,講師的教學(xué)多數(shù)出現(xiàn)對(duì)初學(xué)者的實(shí)際情況并不了解的情況,況且學(xué)習(xí)者的個(gè)體也存在差異呢?當(dāng)然更可怕的是收費(fèi)課程的價(jià)格往往是自己難以承受的。
于是我的所有編程學(xué)習(xí)都改為了自學(xué),繼續(xù)自己的三步學(xué)習(xí)筆記法的學(xué)習(xí)之路。
當(dāng)然自學(xué)的最大問(wèn)題是會(huì)走那么多的彎路,沒(méi)有導(dǎo)師直接輸入式的教學(xué)來(lái)得直接,好在網(wǎng)絡(luò)給我們帶來(lái)無(wú)限搜索的機(jī)會(huì),大家在網(wǎng)絡(luò)上的學(xué)習(xí)日志帶給我們共享交流的機(jī)會(huì),而QQ群等交流平臺(tái)、網(wǎng)絡(luò)社區(qū)的成立,我們可以一起自學(xué),互相批評(píng)交流,也可以獲得更有效,更自主的自學(xué)成果。
于是我以人生已過(guò)半的年齡,決定繼續(xù)我的編程自學(xué)之路,開(kāi)始學(xué)習(xí)python,只希望與大家共同交流,一個(gè)人的獨(dú)行是可怕的,只有一群人的共同前進(jìn)才是有希望的。
誠(chéng)摯期待您的交流分享批評(píng)指點(diǎn)!歡迎聯(lián)系我加入從零開(kāi)始的自學(xué)聯(lián)盟。
這個(gè)時(shí)代互聯(lián)網(wǎng)成為了一種基礎(chǔ)設(shè)施的存在,于是本來(lái)在孤獨(dú)學(xué)習(xí)之路上的我們變得不再孤獨(dú),因?yàn)榫W(wǎng)絡(luò)就是一個(gè)新的客廳,我們時(shí)刻都可以進(jìn)行沙龍活動(dòng)。
非常樂(lè)意能與大家一起交流自己自學(xué)心得和發(fā)現(xiàn),更希望大家能夠?qū)ξ覍W(xué)習(xí)過(guò)程中的錯(cuò)誤給予指點(diǎn)——是的,這樣我就能有許多免費(fèi)的高師了——這也是分享時(shí)代,社區(qū)時(shí)代帶來(lái)的好福利,我相信大家會(huì)的,是吧!
?
根據(jù)完全共享的精神,開(kāi)源互助的理念,我的個(gè)人自學(xué)錄制過(guò)程是全部按4K高清視頻錄制的,從手寫(xiě)筆記到驗(yàn)證手寫(xiě)筆記的上機(jī)操作過(guò)程全程錄制,但因?yàn)?K高清文件太大均超過(guò)5G以上,所以無(wú)法上傳至網(wǎng)絡(luò),如有需要可聯(lián)系我QQ578652607對(duì)傳,樂(lè)意分享。上傳分享到百度網(wǎng)盤(pán)的只是壓縮后的720P的視頻。
?
我的學(xué)習(xí)過(guò)程錄像百度盤(pán)地址分享如下:(清晰度:1280x720)
鏈接:https://pan.baidu.com/s/1jCxMh5aswv8In09ny2IiaQ
提取碼:lg9r
?
Bilibili:
https://www.bilibili.com/video/av40974780/
?
喜馬拉雅語(yǔ)音筆記:
https://www.ximalaya.com/keji/19103006/155417466
轉(zhuǎn)載于:https://www.cnblogs.com/lhghroom/p/10322044.html
總結(jié)
以上是生活随笔為你收集整理的孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 根据人脸做年龄预测
- 下一篇: 【前端】纯CSS实现探照灯效果