爬蟲遇到的問題與解決方案。
1,pip安裝不了requests。
需要更新pip3
Linux用ctrl + r 查找以前(歷史)輸入的命令
結果原因是虛擬環境誤刪過,重裝ok。
Join的作用是眾所周知的,阻塞進程直到線程執行完畢
2.python3 的虛擬環境安裝
python3 -m venv 《文件名》
3,進程join()用處
當一個進程啟動之後,會默認產生一個主線程,因為線程是程序執行流的最小單元,當設置多線程時,主線程會創建多個子線程,在python中,默認情況下(其實就是setDaemon(False)),主線程執行完自己的任務以後,就退出了,此時子線程會繼續執行自己的任務,直到自己的任務結束
4,在多進程中,每一個進程都拷貝了一份數據,而多線程的各個線程則共享相同的數據。這使多線程佔用的資源更少,但是資源混用會導致一些錯誤。
python線程同步機制
5,閉包就是內函數用到外函數的變數時,外函數結束的時候,那個變數會綁定給內函數,不會消失。
6,open() 函數,w,a模式會創建文件,w會清空文件,a會追加。Python open()文件處理使用介紹
7, <form> 是表單結構,html語言,用於post。
8,python報錯『POST data should be bytes or an iterable of bytes』,是因為python3中urllib.request.Request(url,data)里的data數據要是utf-8,python2要的是ascii,所以這裡encode(utf-8)就可以。
9,因為網頁是gbk的,所以寫入是open(encoding=『gbk)也要改,然後寫入的文件才是gbk編碼的。
10, ?P<name>是給正則中的組起一個名字
group(1)-group(9)是按正則中左括弧的順序確定組的順序,因此正則中第一對括弧匹配的內容就是group(1)
(?P<name>....) 無論它出現在第幾個括弧中,都是這個名字,與圓括弧的順序無關,它出現在的那對括弧內,就表示這個括弧內匹配的內容就是group(name)11, BeautifulSoup 解析後生成的實例的方法:
find_all(name,attrs,recursive,text,**kwargs)
name為你要找的任何標記bz則為<b>標籤下的。
12,fout=codecs.open(baike.html,w,encoding=utf-8)
這種方法可以指定一個編碼打開文件,使用這個方法打開的文件讀取返回的將是unicode。寫入時,如果參數是unicode,則使用open()時指定的編碼進行編碼後寫入;如果是str,則先根據源代碼文件聲明的字元編碼,解碼成unicode後再進行前述操作。相對內置的open()來說,這個方法比較不容易在編碼上出現問題。
有編碼檢測的模塊如chardet,但也只會給一個猜測可信度
13,python3把字元串變成了unicode,文件默認編碼變成了utf-8,
14,python3不再支持mysqldb!!而替代它的模塊是PyMySQL ,
推薦閱讀:
※教你如何快速查看您的Mac硬碟還有多少剩餘空間
※在變成大家看到樣子之前,開發人員所見到的GPU是什麼樣子的
※新手如何快速上手運營百家號?這3點純乾貨!
※2017下半年12場人工智慧機器人科技大會合集匯總【收藏版】
※現在吃口香糖都是兩粒一起吃,廣告也是這麼說的,為什麼廠商不大粒的呢?