python爬蟲程序
A. 如何利用python寫爬蟲程序
利用python寫爬蟲程序的方法:
1、先分析網站內容,紅色部分即是網站文章內容div。
B. 如何用python寫出爬蟲
先檢查是否有API
API是網站官方提供的數據介面,如果通過調用API採集數據,則相當於在網站允許的范圍內採集,這樣既不會有道德法律風險,也沒有網站故意設置的障礙;不過調用API介面的訪問則處於網站的控制中,網站可以用來收費,可以用來限制訪問上限等。整體來看,如果數據採集的需求並不是很獨特,那麼有API則應優先採用調用API的方式。
數據結構分析和數據存儲
爬蟲需求要十分清晰,具體表現為需要哪些欄位,這些欄位可以是網頁上現有的,也可以是根據網頁上現有的欄位進一步計算的,這些欄位如何構建表,多張表如何連接等。值得一提的是,確定欄位環節,不要只看少量的網頁,因為單個網頁可以缺少別的同類網頁的欄位,這既有可能是由於網站的問題,也可能是用戶行為的差異,只有多觀察一些網頁才能綜合抽象出具有普適性的關鍵欄位——這並不是幾分鍾看幾個網頁就可以決定的簡單事情,如果遇上了那種臃腫、混亂的網站,可能坑非常多。
對於大規模爬蟲,除了本身要採集的數據外,其他重要的中間數據(比如頁面Id或者url)也建議存儲下來,這樣可以不必每次重新爬取id。
資料庫並沒有固定的選擇,本質仍是將Python里的數據寫到庫里,可以選擇關系型資料庫Mysql等,也可以選擇非關系型資料庫MongoDB等;對於普通的結構化數據一般存在關系型資料庫即可。sqlalchemy是一個成熟好用的資料庫連接框架,其引擎可與Pandas配套使用,把數據處理和數據存儲連接起來,一氣呵成。
數據流分析
對於要批量爬取的網頁,往上一層,看它的入口在哪裡;這個是根據採集范圍來確定入口,比如若只想爬一個地區的數據,那從該地區的主頁切入即可;但若想爬全國數據,則應更往上一層,從全國的入口切入。一般的網站網頁都以樹狀結構為主,找到切入點作為根節點一層層往裡進入即可。
值得注意的一點是,一般網站都不會直接把全量的數據做成列表給你一頁頁往下翻直到遍歷完數據,比如鏈家上面很清楚地寫著有24587套二手房,但是它只給100頁,每頁30個,如果直接這么切入只能訪問3000個,遠遠低於真實數據量;因此先切片,再整合的數據思維可以獲得更大的數據量。顯然100頁是系統設定,只要超過300個就只顯示100頁,因此可以通過其他的篩選條件不斷細分,只到篩選結果小於等於300頁就表示該條件下沒有缺漏;最後把各種條件下的篩選結果集合在一起,就能夠盡可能地還原真實數據量。
明確了大規模爬蟲的數據流動機制,下一步就是針對單個網頁進行解析,然後把這個模式復制到整體。對於單個網頁,採用抓包工具可以查看它的請求方式,是get還是post,有沒有提交表單,欲採集的數據是寫入源代碼里還是通過AJAX調用JSON數據。
同樣的道理,不能只看一個頁面,要觀察多個頁面,因為批量爬蟲要弄清這些大量頁面url以及參數的規律,以便可以自動構造;有的網站的url以及關鍵參數是加密的,這樣就悲劇了,不能靠著明顯的邏輯直接構造,這種情況下要批量爬蟲,要麼找到它加密的js代碼,在爬蟲代碼上加入從明文到密碼的加密過程;要麼採用下文所述的模擬瀏覽器的方式。
數據採集
之前用R做爬蟲,不要笑,R的確可以做爬蟲工作;但在爬蟲方面,Python顯然優勢更明顯,受眾更廣,這得益於其成熟的爬蟲框架,以及其他的在計算機系統上更好的性能。scrapy是一個成熟的爬蟲框架,直接往裡套用就好,比較適合新手學習;requests是一個比原生的urllib包更簡潔強大的包,適合作定製化的爬蟲功能。requests主要提供一個基本訪問功能,把網頁的源代碼給download下來。一般而言,只要加上跟瀏覽器同樣的Requests Headers參數,就可以正常訪問,status_code為200,並成功得到網頁源代碼;但是也有某些反爬蟲較為嚴格的網站,這么直接訪問會被禁止;或者說status為200也不會返回正常的網頁源碼,而是要求寫驗證碼的js腳本等。
下載到了源碼之後,如果數據就在源碼中,這種情況是最簡單的,這就表示已經成功獲取到了數據,剩下的無非就是數據提取、清洗、入庫。但若網頁上有,然而源代碼里沒有的,就表示數據寫在其他地方,一般而言是通過AJAX非同步載入JSON數據,從XHR中找即可找到;如果這樣還找不到,那就需要去解析js腳本了。
解析工具
源碼下載後,就是解析數據了,常用的有兩種方法,一種是用BeautifulSoup對樹狀HTML進行解析,另一種是通過正則表達式從文本中抽取數據。
BeautifulSoup比較簡單,支持Xpath和CSSSelector兩種途徑,而且像Chrome這類瀏覽器一般都已經把各個結點的Xpath或者CSSSelector標記好了,直接復制即可。以CSSSelector為例,可以選擇tag、id、class等多種方式進行定位選擇,如果有id建議選id,因為根據HTML語法,一個id只能綁定一個標簽。
正則表達式很強大,但構造起來有點復雜,需要專門去學習。因為下載下來的源碼格式就是字元串,所以正則表達式可以大顯身手,而且處理速度很快。
對於HTML結構固定,即同樣的欄位處tag、id和class名稱都相同,採用BeautifulSoup解析是一種簡單高效的方案,但有的網站混亂,同樣的數據在不同頁面間HTML結構不同,這種情況下BeautifulSoup就不太好使;如果數據本身格式固定,則用正則表達式更方便。比如以下的例子,這兩個都是深圳地區某個地方的經度,但一個頁面的class是long,一個頁面的class是longitude,根據class來選擇就沒辦法同時滿足2個,但只要注意到深圳地區的經度都是介於113到114之間的浮點數,就可以通過正則表達式"11[3-4].\d+"來使兩個都滿足。
數據整理
一般而言,爬下來的原始數據都不是清潔的,所以在入庫前要先整理;由於大部分都是字元串,所以主要也就是字元串的處理方式了。
字元串自帶的方法可以滿足大部分簡單的處理需求,比如strip可以去掉首尾不需要的字元或者換行符等,replace可以將指定部分替換成需要的部分,split可以在指定部分分割然後截取一部分。
如果字元串處理的需求太復雜以致常規的字元串處理方法不好解決,那就要請出正則表達式這個大殺器。
Pandas是Python中常用的數據處理模塊,雖然作為一個從R轉過來的人一直覺得這個模仿R的包實在是太難用了。Pandas不僅可以進行向量化處理、篩選、分組、計算,還能夠整合成DataFrame,將採集的數據整合成一張表,呈現最終的存儲效果。
寫入資料庫
如果只是中小規模的爬蟲,可以把最後的爬蟲結果匯合成一張表,最後導出成一張表格以便後續使用;但對於表數量多、單張表容量大的大規模爬蟲,再導出成一堆零散的表就不合適了,肯定還是要放在資料庫中,既方便存儲,也方便進一步整理。
寫入資料庫有兩種方法,一種是通過Pandas的DataFrame自帶的to_sql方法,好處是自動建表,對於對表結構沒有嚴格要求的情況下可以採用這種方式,不過值得一提的是,如果是多行的DataFrame可以直接插入不加索引,但若只有一行就要加索引否則報錯,雖然這個認為不太合理;另一種是利用資料庫引擎來執行SQL語句,這種情況下要先自己建表,雖然多了一步,但是表結構完全是自己控制之下。Pandas與SQL都可以用來建表、整理數據,結合起來使用效率更高。
C. Python爬蟲是什麼
爬蟲一般是指網路資源的抓取,由於Python的腳本特性,易於配置對字元的處理非常靈活,Python有豐富的網路抓取模塊,因此兩者經常聯系在一起Python就被叫作爬蟲。
Python爬蟲的構架組成:
D. 如何用Python做爬蟲
在我們日常上網瀏覽網頁的時候,經常會看到一些好看的圖片,我們就希望把這些圖片保存下載,或者用戶用來做桌面壁紙,或者用來做設計的素材。
我們最常規的做法就是通過滑鼠右鍵,選擇另存為。但有些圖片滑鼠右鍵的時候並沒有另存為選項,還有辦法就通過就是通過截圖工具截取下來,但這樣就降低圖片的清晰度。好吧其實你很厲害的,右鍵查看頁面源代碼。
我們可以通過python來實現這樣一個簡單的爬蟲功能,把我們想要的代碼爬取到本地。下面就看看如何使用python來實現這樣一個功能。
E. Python爬蟲程序要用到哪些知識和技術
1.對網頁結構需要有一個基本的了解和認知。
我們平時上網瀏覽網頁,信息展現在瀏覽器裡面的頁面中,但我們用爬蟲要抓取的信息是放在網頁源代碼裡面的。(圖1為我們看到的頁面,圖2
為頁面對應的網頁源代碼)
在瀏覽器中使用快捷鍵F12來調出該界面,這個界面稱為開發者模式
2.知道如何去找到我們需要的信息在網頁源代碼的那個位置。
一般來說信息可能直接存在於網頁的html頁面中,但是有一些動態載入的信息可能存在於js頁面中。有一些網站,它的數據價值比較高,總會有競爭對手去抓取它的數據,所以它就會有比較厲害的反抓取措施,一般新手很難應付這種反抓取措施。一般的靜態網頁要求你對瀏覽器的開發者模式很熟悉,能夠利用這個工具去定位自己需要的信息在網頁源代碼中的那個位置,網上有相關教程,搜一下就能找到,更復雜的動態網頁,就需要你對動態載入的網頁有點研究才行。這些知識點和技能,都是需要自己動手去嘗試才能學會的。
3.知道用什麼python程序庫去完成網頁源代碼的下載,解析,數據提取,存儲。
python是一門很簡單的編程語言,一方面是因為python的語法簡潔,另一方面是因為在python社區,已經有很多很多的人為我們貢獻了很多很多開源的程序庫,我們在編寫程序的時候,直接調用這些程序庫,就能夠省下很多很多工作量。
F. 如何利用Python爬蟲從網頁上批量獲取想要的信息
稍微說一下背景,當時我想研究蛋白質與小分子的復合物在空間三維結構上的一些規律,首先得有數據啊,數據從哪裡來?就是從一個涵蓋所有已經解析三維結構的蛋白質-小分子復合物的資料庫裡面下載。這時候,手動一個個去下顯然是不可取的,我們需要寫個腳本,能從特定的網站選擇性得批量下載需要的信息。python是不錯的選擇。
import urllib #python中用於獲取網站的模塊
import urllib2, cookielib
有些網站訪問時需要cookie的,python處理cookie代碼如下:
cj = cookielib.CookieJar ( )
opener = urllib2.build_opener( urllib2.HttpCookieProcessor(cj) )
urllib2.install_opener (opener)
通常我們需要在網站中搜索得到我們需要的信息,這里分為二種情況:
1. 第一種,直接改變網址就可以得到你想要搜索的頁面:
def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/xxx.cgi?&' + 『你想要搜索的參數』 # 結合自己頁面情況適當修改
page = urllib2.urlopen(url)
pageContent = page.read( )
return pageContent #返回的是HTML格式的頁面信息
2.第二種,你需要用到post方法,將你搜索的內容放在postdata裡面,然後返回你需要的頁面
def GetWebPage( x ): #我們定義一個獲取頁面的函數,x 是用於呈遞你在頁面中搜索的內容的參數
url = 'http://xxxxx/xxx' #這個網址是你進入搜索界面的網址
postData = urllib.urlencode( { 各種『post』參數輸入 } ) #這裡面的post參數輸入需要自己去查
req= urllib2.Request (url, postData)
pageContent = urllib2.urlopen (req). read( )
return pageContent #返回的是HTML格式的頁面信息
在獲取了我們需要的網頁信息之後,我們需要從獲得的網頁中進一步獲取我們需要的信息,這里我推薦使用 BeautifulSoup 這個模塊, python自帶的沒有,可以自行網路谷歌下載安裝。 BeautifulSoup 翻譯就是『美味的湯』,你需要做的是從一鍋湯裡面找到你喜歡吃的東西。
import re # 正則表達式,用於匹配字元
from bs4 import BeautifulSoup # 導入BeautifulSoup 模塊
soup = BeautifulSoup(pageContent) #pageContent就是上面我們搜索得到的頁面
soup就是 HTML 中所有的標簽(tag)BeautifulSoup處理格式化後的字元串,一個標準的tag形式為:
hwkobe24
通過一些過濾方法,我們可以從soup中獲取我們需要的信息:
(1) find_all ( name , attrs , recursive , text , **kwargs)
這裡面,我們通過添加對標簽的約束來獲取需要的標簽列表, 比如 soup.find_all ('p') 就是尋找名字為『p』的 標簽,而soup.find_all (class = "tittle") 就是找到所有class屬性為"tittle" 的標簽,以及soup.find_all ( class = re.compile('lass')) 表示 class屬性中包含『lass』的所有標簽,這里用到了正則表達式(可以自己學習一下,非常有用滴)
當我們獲取了所有想要標簽的列表之後,遍歷這個列表,再獲取標簽中你需要的內容,通常我們需要標簽中的文字部分,也就是網頁中顯示出來的文字,代碼如下:
tagList = soup.find_all (class="tittle") #如果標簽比較復雜,可以用多個過濾條件使過濾更加嚴格
for tag in tagList:
print tag.text
f.write ( str(tag.text) ) #將這些信息寫入本地文件中以後使用
(2)find( name , attrs , recursive , text , **kwargs )
它與 find_all( ) 方法唯一的區別是 find_all() 方法的返回結果是值包含一個元素的列表,而 find() 方法直接返回結果
(3)find_parents( ) find_parent( )
find_all() 和 find() 只搜索當前節點的所有子節點,孫子節點等. find_parents() 和 find_parent() 用來搜索當前節點的父輩節點,搜索方法與普通tag的搜索方法相同,搜索文檔搜索文檔包含的內容
(4)find_next_siblings() find_next_sibling()
這2個方法通過 .next_siblings 屬性對當 tag 的所有後面解析的兄弟 tag 節點進代, find_next_siblings() 方法返回所有符合條件的後面的兄弟節點,find_next_sibling() 只返回符合條件的後面的第一個tag節點
(5)find_previous_siblings() find_previous_sibling()
這2個方法通過 .previous_siblings 屬性對當前 tag 的前面解析的兄弟 tag 節點進行迭代, find_previous_siblings()方法返回所有符合條件的前面的兄弟節點, find_previous_sibling() 方法返回第一個符合條件的前面的兄弟節點
(6)find_all_next() find_next()
這2個方法通過 .next_elements 屬性對當前 tag 的之後的 tag 和字元串進行迭代, find_all_next() 方法返回所有符合條件的節點, find_next() 方法返回第一個符合條件的節點
(7)find_all_previous() 和 find_previous()
這2個方法通過 .previous_elements 屬性對當前節點前面的 tag 和字元串進行迭代, find_all_previous() 方法返回所有符合條件的節點, find_previous()方法返回第一個符合條件的節點
具體的使用方法還有很多,用到這里你應該可以解決大部分問題了,如果要更深入了解可以參考官方的使用說明哈!
G. python爬蟲可以做什麼
1、收集數據
Python爬蟲程序可用於收集數據,這是最直接和最常用的方法。由於爬蟲程序是一個程序,程序運行得非常快,不會因為重復的事情而感到疲倦,因此使用爬蟲程序獲取大量數據變得非常簡單、快速。
2、數據儲存
Python爬蟲可以將從各個網站收集的數據存入原始頁面資料庫。其中的頁面數據與用戶瀏覽器得到的HTML是完全一樣的。注意:搜索引擎蜘蛛在抓取頁面時,也做一定的重復內容檢測,一旦遇到訪問許可權很低的網站上有大量抄襲、採集或者復制的內容,很可能就不再爬行。
3、網頁預處理
Python爬蟲可以將爬蟲抓取回來的頁面,進行各種步驟的預處理。比如提取文字、中文分詞、消除噪音、索引處理、特殊文字處理等。
4、提供檢索服務、網站排名
Python爬蟲在對信息進行組織和處理之後,為用戶提供關鍵字檢索服務,將用戶檢索相關的信息展示給用戶。同時可以根據頁面的PageRank
值來進行網站排名,這樣Rank值高的網站在搜索結果中會排名較前,當然也可以直接使用Money購買搜索引擎網站排名。
5、科學研究
在線人類行為、在線社群演化、人類動力學研究、計量社會學、復雜網路、數據挖掘等領域的實證研究都需要大量數據,Python爬蟲是收集相關數據的利器。
H. 爬蟲python能做什麼
能用來做:1、收集數據;由於爬蟲程序是一個程序,程序運行得非常快,因此使用爬蟲程序獲取大量數據變得非常簡單和快速。2、刷流量和秒殺;當爬蟲訪問一個網站時,如果網站無法識別訪問來自爬蟲,那麼它可能將被視為正常訪問,進而刷了網站的流量。
推薦學習:Python視頻教程
python爬蟲可以用來做什麼?
1、收集數據
python爬蟲程序可用於收集數據。這也是最直接和最常用的方法。由於爬蟲程序是一個程序,程序運行得非常快,不會因為重復的事情而感到疲倦,因此使用爬蟲程序獲取大量數據變得非常簡單和快速。
由於99%以上的網站是基於模板開發的,使用模板可以快速生成大量布局相同、內容不同的頁面。因此,只要為一個頁面開發了爬蟲程序,爬蟲程序也可以對基於同一模板生成的不同頁面進行爬取內容。
2、調研
比如要調研一家電商公司,想知道他們的商品銷售情況。這家公司聲稱每月銷售額達數億元。如果你使用爬蟲來抓取公司網站上所有產品的銷售情況,那麼你就可以計算出公司的實際總銷售額。此外,如果你抓取所有的評論並對其進行分析,你還可以發現網站是否出現了刷單的情況。數據是不會說謊的,特別是海量的數據,人工造假總是會與自然產生的不同。過去,用大量的數據來收集數據是非常困難的,但是現在在爬蟲的幫助下,許多欺騙行為會赤裸裸地暴露在陽光下。
3、刷流量和秒殺
刷流量是python爬蟲的自帶的功能。當一個爬蟲訪問一個網站時,如果爬蟲隱藏得很好,網站無法識別訪問來自爬蟲,那麼它將被視為正常訪問。結果,爬蟲「不小心」刷了網站的流量。
除了刷流量外,還可以參與各種秒殺活動,包括但不限於在各種電商網站上搶商品,優惠券,搶機票和火車票。目前,網路上很多人專門使用爬蟲來參與各種活動並從中賺錢。這種行為一般稱為「薅羊毛」,這種人被稱為「羊毛黨」。不過使用爬蟲來「薅羊毛」進行盈利的行為實際上遊走在法律的灰色地帶,希望大家不要嘗試。
更多編程相關知識,請訪問:編程教學!!以上就是小編分享的關於爬蟲python能做什麼?的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
I. python爬蟲必知必會的幾個工具包
爬蟲是學習python有趣途徑,同樣有強大的框架
python自帶的urllib其實使用起來有點麻煩,推薦你使用requests庫,這是一個非常強大,使用方便的庫,而且有全面的中文文檔,網上爬數據爬圖片都不在話下。
還有更高級的庫-scrapy庫。
Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 其可以應用在數據挖掘,信息處理或存儲歷史數據等一系列的程序中。Scrapy 使用了 Twisted非同步網路庫來處理網路通訊。爬取網站數據,當然少不了正則模塊re,還有beautiful soup模塊
re模塊具有強大的處理字元串的能力,但是使用起來並不簡單,因為當你覺得可以使用正則表達式的時候,這本身就是一個問題,因為寫出一個正則表達式就是一個大問題。不過不用怕,在處理網站結構的數據時,有更強大的庫-beautiful soup
Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫,擁有完善的中文文檔,提供了種類繁多的屬性和方法供你選擇,讓你解析網站數據更加的得心應手!
web後端框架django,flask
python在web開發方面也是多面手,既有大而全的框架django,又有小而精的框架flask。
雖說在web開發方面有許多框架,但是最常用的還是這兩種,如果你想做中方面的工作,學好這兩個框架就夠用了,而且,目前的python後端開發的招聘需求多半是要求會這兩個框架。