作為一名IT行業的從業者,同時也在使用Python做機器學習方面的開發,所以我來回答一下這個問題。
首先,對于初學者來說學習Python是不錯的選擇,一方面Python語言的語法比較簡單易學,另一方面Python的實驗環境也比較容易搭建。
學習Python需要的時間取決于三方面因素,其一是學習者是否具有一定的計算機基礎知識,其二是不同的學習方向需要不同的學習時間,其三是掌握程度不同需要的時間也不同。
如果學習者具備一定的計算機基礎,那么學習Python語言的基礎語法部分還是相對比較容易的,通常一周左右的時間就能夠掌握基本的Python語法,然后再利用2到3周的時間完成一些實驗通常就可以了。如果基礎比較薄弱,或者干脆沒有任何計算機基礎,那么學習Python的基本語法也不會有太大的困難,但是學習時間會有一定的延長,正常情況下6到8周能夠熟練掌握基本語法,并完成一些簡單的實驗。
如果學習Web開發方向,還需要學習一定的前端開發內容(Html、CSS和JavaScript)和Django庫,另外還需要掌握數據庫知識。對于初學者來說,通常需要3個月左右的時間,能夠達到開發崗位實習要求。
如果學習大數據方向,則需要具備一定的數學基礎(線性代數、概率論等),需要學習Numpy、Matplotlib、Scipy、pandas等庫,順利的話3個月左右也能夠達到實習崗位的要求。學習大數據方向通常需要先學習如何進行數據采集,通常是先學習如何開發“爬蟲”,然后再學習數據分析。另外,學習大數據分析的過程也會順便學習機器學習的相關內容,因為機器學習是目前數據分析的常見手段之一。
我從事互聯網行業多年,目前也在帶計算機專業的研究生,主要的研究方向集中在大數據和人工智能領域,我會陸續寫一些關于互聯網技術方面的文章,感興趣的朋友可以關注我,相信一定會有所收獲。
如果有互聯網方面的問題,或者考研方面的問題,都可以咨詢我,謝謝!
授人以魚不如授人以漁,我介紹一下用Python自動化下載我想要的論文參考文獻格式的方法。其用到的方法和工具同從知網爬取論文數據類似,你可以做個參考。
工具:selenium瀏覽器: Chrome引用的庫:為了將每個下載到的文件都能對應正確的文件名,用了多線程來監聽下載目錄文件夾,用watchdog一個開源庫來監聽下載目錄文件夾,當該文件夾中出現新的文件時,程序自動將該文件進行重命名。
軟件從一個txt文件中讀取出需要下載的文件名稱,然后進行自動化下載。從txt中讀取文件名稱時,用到了正則表達式。
需要下載的文獻在txt中
打開瀏覽器
打開瀏覽器后,需要獲取到頁面的相應操作控件,需要獲取輸入框和搜索按鈕,selenium提供了find_element_by_id函數,可以在界面中找到控件的id即可
同理找到搜索按鈕的id,然后在輸入框中填入需要搜索的文章,觸發按鈕的click事件。
按照上述思路進行界面自動化操作,進入到想要的下載鏈接按鈕處
現在需要獲取到該鏈接,即圖中的href鏈接既是需要下載的內容鏈接
事實上,下載按鈕有相應的屬性值,只需要通過get_attribute函數獲取即可。
以上既是自動化下載文獻引用格式的一個過程。爬取知網論文思路類似,完全可以通過Selenium來實現。
答:本文邀請feifan來回答,他總結了使用python自帶庫完成爬蟲的方法,并且列出了爬蟲在實際中可能遇到的幾個問題, 教會你零基礎入門python爬蟲~
此處的爬蟲并不是百度或者google這樣需要沿著某條路徑采集互聯網上所有信息的機器人,而是針對某個特定的網頁,從中提取出我們需要的信息。比如我們在中關村上查到了一臺手機的詳情頁,想把其中的cpu信息、操作系統、分辨率等等字段提出出來。即此處的爬蟲是指針對特定網頁結構、規模很小、抓取路徑收斂的情況而言。下文我們以一個實例,看看如何從頭寫一個python爬蟲。
抓取頁面基本方法瀏覽器中看到的頁面,實際上是通過一系列的http請求加載并渲染服務器的資源。同理只要我們能夠用python發出http請求,通過get或post的方法獲得服務器返回的html片段、html頁面或json數據串,就可以從中抓取到想要的內容。
python中對http請求的封裝是在urllib和urllib2兩個庫里。
urllib提供了一些工具方法,用于對發送請求時的字符串進行轉義或編碼。
發送get/post請求則需要用到urllib2中提供的幾個類
在掌握了如何在python中構造http請求后,下一步需要做的就是結合具體的網頁,分析出web頁面的請求方式、參數傳遞方式和必要的header信息(如cookie等)。chrome控制臺的network分析基本上可以滿足需求,但一款抓包利器無疑可以提升我們的效率。推薦使用fiddler進行抓包和解包,可以更清晰第看到http中所用的不同請求方式。
字符串查找、正則表達式、html解析http請求的response通常包含兩種:json字符串,或html代碼片段,信息的提取就轉變成了字符串處理。此時無論是通過字符串查找、正則表達式匹配,只要能定位到目標字段即可。
但更好的方法是對html的Dom樹進行解析,尤其是存在多個目標字段需要抓取時,解析html的方式能夠對特殊格式的字段信息進行批量解析。
這里使用python自帶的htmlparser進行解析,htmlparser對html片段進行深度優先的遍歷,在遍歷的過程中可以識別出開始標簽、結束標簽和標簽中的內容,因此提供了一種基于標簽tag的編程方式。看下面的例子
需要提取手機的操作系統、核心數、cpu型號等信息,根據html的標簽、屬性名稱,代碼如下:
針對中關村上的某個手機詳細
handle_data可以提取html標簽中的數據,但handle_data存在兩個問題。
(1)當標簽內容為空時,handle_data自動跳過該標簽。這里的標簽為空是指標簽中不包含任意字符串內容、不包含其他的子標簽。注意,當標簽中含有&nb等空白字符串時,handle_data可以解析出其中的data。比如以下結構中,電話號碼一列允許為空,通過html_parser解析后只得到4個<td>的標簽內容。
由于會跳過內容為空的標簽的解析,就會打亂html的結構,由于數據的缺失返回的list長度不定,導致無法將list中每項內容與html中的內容對應起來。
(2)標簽中包含子標簽時,內容會被分割到不同的handle_data函數中,比如
由于handle_data是針對每個標簽返回數據,以上的td里包含了一個span子標簽,handle_data分為2次返回數據。即第一次調用handle_data返回狀態:,第二次調用handle_data返回已拒絕。我們希望<td>標簽中的內容作為整體返回,而現在被分割成了兩塊,同樣會破壞結構。
解決以上兩個問題的關鍵方法在于,使用cache緩存字符串,把對數據的處理從handle_data推遲到handle_endtag。只有遇到end_tag時,才能確定標簽閉合,使數據完整。
爬蟲被屏蔽后怎么辦服務器會通過一些策略屏蔽惡意爬蟲,以避免對服務器資源的消耗,如檢查同一IP的訪問頻率、訪問間隔等。
所以我們也應該使用一些簡單策略,使我們的爬蟲看起來更像是人的行為,以繞開服務器的檢測機制。常用的方法包括延長相鄰請求的間隔,相鄰間隔使用隨機時長。
在請求的header字段中包含了user-agent字段,服務器通過檢測user-agent字段確定客戶端的類型。如果不指定user-agent字段,請求時腳本會默認填充該字段,如下圖
# python中默認的user-agent字段
網上有一些說法user-agent的值會影響爬蟲是否能夠抓取web內容,為了避免爬蟲被屏蔽,將user-agent的值設為瀏覽器的類型:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
但在實際抓取的幾個web站點中,user-agent的值對爬蟲被屏蔽沒有影響,在使用時不用刻意設置user-agent的值。
以上的方法都是避免爬蟲被屏蔽掉。但萬一很不幸爬蟲已經被屏蔽了,發出請求返回的結果是輸入驗證碼的頁面,此時該如何解決呢?
對于支持https協議的站點,此時可以嘗試的一種方案是:改用https協議。
項目中遇到爬蟲被百度屏蔽的現象,嘗試了很多方法都無效。后來將原來鏈接中的http協議換成https爬蟲又開始工作了。原理雖然不清楚,但簡單可行。
帶驗證碼的登錄很多web內容只有在登錄后才有權限訪問,服務器通過創建session并下發sessionid來維持與客戶端的鏈接狀態。客戶端在每次發送請求時,都在cookie中攜帶sessionid等字段信息。sessionid是無法復用的,也即在瀏覽器中登錄后所獲得的sessionid直接拿到python腳本中使用,返回的結果仍然是跳轉到登錄頁面的。因為通過http下發的sessionid是捆綁到端口號的,也就是與服務器維持通信的是客戶端上的某個進程,把瀏覽器中的sessionid拿到python腳本中,由于更換了進程sessionid當然失效了。
既然無法繞開登錄,我們就在python腳本中完成登錄的過程,拿到登錄后返回的cookie、sessinoid等。這里有兩個難點需要解決,1)服務器登錄邏輯的分析與猜測;2)解決登錄時存在的驗證碼識別問題。
登錄除了需要post提交用戶名、密碼和sessionid之外,通常也會隱式提交部分參數,可以用chrome瀏覽器的調試模式查看post提交的參數及對應的值,登錄成功之后,我們就可以拿到返回的cookie值了。
登錄時的驗證碼可以通過OCR自動識別,嘗試了google的tesseract-ocr準確率并不高。所以推薦手動輸入驗證碼,幫助爬蟲完成登錄,畢竟授權只需要一次輸入。
手動輸入驗證碼的思路如下,在請求sessionid的同時保存驗證碼的圖片,人工讀取驗證碼的內容,與username和password一起提交。示例代碼如下:
需要抓取javascript加載的結果詳細參考外部鏈接:https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/
這篇文章中的思路是,通過使用web kit library建立本地的javascript執行環境,模擬瀏覽器對頁面的加載渲染,從而抓取javascript處理后的頁面內容。
這個例子中javascript所加載的結果,也是通過ajax重新向服務器發起請求返回的,直接發送ajax請求并抓取結果即可。在本地搭建javascript的執行環境有些畫蛇添足,但也是一種可以參考的思路。
本文總結了使用python自帶庫完成爬蟲的方法,并且列出了爬蟲在實際中可能遇到的幾個問題,比如爬蟲被屏蔽、需要輸入驗證碼進行登錄等。實踐中的難點在于分析和猜測服務器的登錄邏輯,并且提取必需的參數完成登錄鑒權。
你好,我是中移的一名通訊工程師,很高興回答你的問題。
說起來也遺憾,難過,我雖然是通訊行業的,但也是因為想著多學一點知識,19年中旬找到了一個免費學習網站學習python,但是由于各種原因,學完了80%了,最后20%還是沒能堅持下來,所以我這些話可能含有一些負能量,但我希望在我介紹這個網站之前,能讓你明白學習是必須持之以恒,決定了的事就一定要做好,及時我現在在通訊行業也干得不錯哈。呵呵。
直接不如主題吧,相比你是對python是有一定了解的了,也不用我介紹他的優勢了,但學習python的網站機構太多了,誰叫這個“蟒蛇”突然火起來了呢?hei(黑)ma(馬)程-序員(系統會檢測廣告,沒辦法才這樣)這個網站是我大學室友介紹的,這個機構向上線下都能培訓,在國內也小有名氣,不僅是編程語言,還有運維工程師、項目經理、PS軟件涉及、人工智能、大數據等等當下熱門的IT技術、熱門技能,它基本覆蓋
優點:1、課程免費,資源豐富,有自己的論壇,并且信息量大,可以先免費學習,覺得不錯再找線下實地培訓2、課程視頻基本都可以用百度云盤下載到你電腦上,可自由安排學習時間3、一門技術,請的基本是該行業比較有名氣的講師,好比python,那么老師至今的演講風格我都無法忘記,幽默不說,特別好理解。4、既然說到這個機構,就稍微提一下它的付費課程跟脫產課程吧。付費課程是針對那些有一定基礎的人群所開設的,基本幾千塊錢一門技能,當然沒寄出的,可以回到上面我講的,先看免費視頻看完后就可以說有基礎了。
面授脫產課程是面向所有成年人開設的課程,我那室友說,只要下定決定學,就業率還是很高的,5個月時間,學費2萬左右(根據技能不同,價格不同),條件艱苦的可以貸款,找到了工作后在分期還,我室友學的是前端,現在深圳工作,目前工資大概10K.好啦,這是我分享的內容。希望你能喜歡