爬蟲遇到的問題與解決方案。

爬蟲遇到的問題與解決方案。

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場人工智慧機器人科技大會合集匯總【收藏版】
現在吃口香糖都是兩粒一起吃,廣告也是這麼說的,為什麼廠商不大粒的呢?

TAG:爬蟲計算機網路 | 科技 | 編程 |