Ⅰ python爬蟲一次可爬多少
導讀:今天首席CTO筆記來給各位分享關於python爬蟲一次可爬多少的相關內容,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!
python爬蟲爬取只顯示10個一個借口幾萬條數據但是只返回十條_爬蟲實踐之爬取10000條菜譜數據
2020-12-0306:37:24
weixin_39990029
碼齡5年
關注
.png
爬蟲實踐之XX行代碼爬取10000菜譜數據
什麼是爬蟲
爬蟲:又叫做網路蜘蛛,是一段自動抓取互聯網信息的程序,從互聯網上抓取對於我們有價值的信息。
點擊這里了解Python爬蟲介紹
如何合法地爬蟲
有些網站不允許網路爬蟲,或是對可爬取的內容做了限制,一個網站的爬蟲協議可通過訪問該網站的robots.txt文件獲得
以豆瓣網為例
訪問該網址(),可了解到豆瓣的爬蟲協議如下
.png
可以看到,豆瓣對於不同的訪問者有不同的訪問限制,其中對於用戶名為WandoujiaSpider的訪問者,豆瓣不允許訪問。
我用到的菜譜網站對爬蟲無限制,所以爬蟲是合法的。
.png
本篇特色
連續爬取10000個網頁
引入第三方庫
importrequests#發送請求
importre#正則表達式,用於提取網頁數據
importwinsound#提醒程序運行結束
importtime#計算程序運行時間
如果沒有安裝這些第三方庫,可以在命令提示符中輸入如下代碼,進行下載
pipinstallrequests,re,winsound,time
爬蟲的三個步驟
獲取要爬取的所有網頁的網址
提取網頁內容中的有用信息
信息導出
每個步驟對應一個函數
Step_1獲取要爬取的所有網頁的網址
首先我們打開該網址,查看它的源代碼
.png
.png
網頁源代碼
觀察發現每道菜對應的網址在這個目錄下
.png
用正則表達式獲得該網址,寫入列表中
由於每一個網頁只有十道菜,點擊下一頁後發現網頁的變化規律為換頁時網址只有數字改變
.png
可以看到最多有1000頁,也就是有10000道菜
.png
使用循環,將每一頁的菜對應的網址都寫入列表,每一次寫入時寫入一行列表,多次寫入後,形成一個二維的列表,前兩頁的菜譜網址在二維列表中顯示如下:
.png
代碼如下
all_url=[]#創建一個數組用於存儲網頁地址
defget_all_url(n):#這個函數用於獲得網頁中的菜的全部網址
if(n==1):
url=""
else:
url=''%n#%s相當於C語言中的%s,表示格式化一個對象為字元,同理%d表示格式化一個對象為整數
headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)
AppleWebKit/537.36(KHTML,likeGecko)Chrome/80.0.3987.122Safari/537.36"}
response=requests.get(url,headers=headers)#訪問網頁
response.encoding="utf-8"#設置接收編碼格式
pattern=re.compile(r'atarget="_blank"href="([a-zA-z]+://[^s]*)"',re.S)
#正則表達式提取網頁中的網址,re.S表示在整個文本中進行匹配,如果不加re.S,將只在一行進行匹配
result=pattern.findall(response.text)#獲取的網頁結果存儲到result里
all_url.append(result[0:10])#由於每頁只有十道菜,result中只有前十條對應的是菜的網址,故我們只添加前十條
returnall_url#作為返回值返回這個列表
關於headers的說明
在使用python爬蟲爬取數據的時候,經常會遇到一些網站的反爬蟲措施,一般就是針對於headers中的User-Agent,如果沒有對headers進行設置,User-Agent會聲明自己是python腳本,而如果網站有反爬蟲的想法的話,必然會拒絕這樣的連接。而修改headers可以將自己的爬蟲腳本偽裝成瀏覽器的正常訪問,來避免這一問題。點擊這里了解詳情
關於編碼格式utf-8的說明
utf-8,可以編碼中文,大部分python編譯器都默認編碼方式為utf-8點擊這里了解詳情
Step_2提取網頁中的有用信息
打開一道菜的網址,查看源代碼,尋找我們需要的信息在哪裡,然後用正則表達式獲取,流程與上個函數獲取網址相同
主輔料信息在這里
.png
特徵信息在這里(包括做法和口味)
.png
defget_info(resp,output):
name_pattern=re.compile(r'h1(.*)/h1')#正則表達式獲取菜名信息
food_pattern=re.compile(r'spanclass="t"(.*)/spanspanclass="a"(.*)/span/a/div')#正則表達式獲得主料信息
fixing_pattern=re.compile(r'divclass="c_mtr_li"spanclass="t1"(.*)/spanspanclass="a"(.*)/span/div')#正則表達式獲得輔料信息
fearture1_pattern=re.compile(r'divclass="cpargscpargs2"divclass="i"/div(.)/div')#正則表達式獲得特徵_1
fearture2_pattern=re.compile(r'divclass="cpargscpargs3"divclass="i"/div(.*)/div')#正則表達式獲得特徵_2
name=name_pattern.findall(resp.text)#提取菜名信息
food=food_pattern.findall(resp.text)#提取主料信息
fixing=fixing_pattern.findall(resp.text)#提取輔料信息
fearture1=fearture1_pattern.findall(resp.text)#提取特徵_1
fearture2=fearture2_pattern.findall(resp.text)#提取特徵_2
output.write(str(name))#將菜名寫入output文件,write函數不能寫int類型的參數,所以使用str()轉化
output.write('t')#進入下一個單元格
output.write(str(fearture1))#將特徵_1寫入output文件
output.write('t')#進入下一個單元格
output.write(str(fearture2))#將特徵_2寫入output文件
output.write('t')#進入下一個單元格
foriinrange(len(food)):
forjinrange(len(food[i])):
output.write(str(food[i][j]))#寫入主料
output.write('t')
if(len(food)11):
output.write('t'*2*(11-len(food)))#每道菜的主料數目不同,該行代碼可使表格內容對齊
foriinrange(len(fixing)):
forjinrange(len(fixing[i])):
output.write(str(fixing[i][j]))#寫入輔料
output.write('t')
output.write('n')#換行
Step_3信息導出
defspider():
output=open('E:programingpython蘇菜_2.xls','w',encoding='utf-8')#創建一個excel文件,編碼格式為utf-8
output.write('名稱t做法t特色t主料')#寫入標題欄
output.write('t'*22)#使內容對齊
output.write('輔料n')#寫入標題欄
foriinrange(len(all_url)):
forjinrange(len(all_url[i])):
url2=all_url[i][j]
response=requests.get(url2)#逐個訪問網頁,獲得數據
response.encoding="utf-8"#設置接收編碼格式
get_info(response,output)#處理數據,提取信息
output.close()#關閉文件
主函數
time_start=time.time()#記錄程序開始時間
foriinrange(1,2):#逐頁獲取菜譜網頁信息
get_all_url(i)
spider()#進行提取處理並導出
ration=1000#提示音時長,1000毫秒=1秒
freq=440#提示音頻率
time_end=time.time()#記錄程序結束時間
print('totallycost',time_end-time_start)#列印程序運行時間
winsound.Beep(freq,ration*10)#響鈴提示程序結束
經實驗,爬取10000條代碼需要用時3453秒左右
.png
最後獲得的數據如下
.png
寫在後面
我是一個C語言上不了80的小白,全靠某度和某歌東拼西湊我的這個程序,在代碼風格與寫作等方面存在不可避免地會有一些錯誤和不足的地方,希望大家多多與我交流,多多批評指教我。
Python爬蟲可以爬取什麼Python爬蟲可以爬取的東西有很多,Python爬蟲怎麼學?簡單的分析下:
如果你仔細觀察,就不難發現,懂爬蟲、學習爬蟲的人越來越多,一方面,互聯網可以獲取的數據越來越多,另一方面,像Python這樣的編程語言提供越來越多的優秀工具,讓爬蟲變得簡單、容易上手。
利用爬蟲我們可以獲取大量的價值數據,從而獲得感性認識中不能得到的信息,比如:
知乎:爬取優質答案,為你篩選出各話題下最優質的內容。
淘寶、京東:抓取商品、評論及銷量數據,對各種商品及用戶的消費場景進行分析。
安居客、鏈家:抓取房產買賣及租售信息,分析房價變化趨勢、做不同區域的房價分析。
拉勾網、智聯:爬取各類職位信息,分析各行業人才需求情況及薪資水平。
雪球網:抓取雪球高回報用戶的行為,對股票市場進行分析和預測。
爬蟲是入門Python最好的方式,沒有之一。Python有很多應用的方向,比如後台開發、web開發、科學計算等等,但爬蟲對於初學者而言更友好,原理簡單,幾行代碼就能實現基本的爬蟲,學習的過程更加平滑,你能體會更大的成就感。
掌握基本的爬蟲後,你再去學習Python數據分析、web開發甚至機器學習,都會更得心應手。因為這個過程中,Python基本語法、庫的使用,以及如何查找文檔你都非常熟悉了。
對於小白來說,爬蟲可能是一件非常復雜、技術門檻很高的事情。比如有人認為學爬蟲必須精通Python,然後哼哧哼哧系統學習Python的每個知識點,很久之後發現仍然爬不了數據;有的人則認為先要掌握網頁的知識,遂開始HTMLCSS,結果入了前端的坑,瘁……
但掌握正確的方法,在短時間內做到能夠爬取主流網站的數據,其實非常容易實現,但建議你從一開始就要有一個具體的目標。
在目標的驅動下,你的學習才會更加精準和高效。那些所有你認為必須的前置知識,都是可以在完成目標的過程中學到的。這里給你一條平滑的、零基礎快速入門的學習路徑。
1.學習Python包並實現基本的爬蟲過程
2.了解非結構化數據的存儲
3.學習scrapy,搭建工程化爬蟲
4.學習資料庫知識,應對大規模數據存儲與提取
5.掌握各種技巧,應對特殊網站的反爬措施
6.分布式爬蟲,實現大規模並發採集,提升效率
一
學習Python包並實現基本的爬蟲過程
大部分爬蟲都是按「發送請求——獲得頁面——解析頁面——抽取並儲存內容」這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網頁信息的過程。
Python中爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider等,建議從requests+Xpath開始,requests負責連接網站,返回網頁,Xpath用於解析網頁,便於抽取數據。
如果你用過BeautifulSoup,會發現Xpath要省事不少,一層一層檢查元素代碼的工作,全都省略了。這樣下來基本套路都差不多,一般的靜態網站根本不在話下,豆瓣、糗事網路、騰訊新聞等基本上都可以上手了。
當然如果你需要爬取非同步載入的網站,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現自動化,這樣,知乎、時光網、貓途鷹這些動態的網站也可以迎刃而解。
二
了解非結構化數據的存儲
爬回來的數據可以直接用文檔形式存在本地,也可以存入資料庫中。
開始數據量不大的時候,你可以直接通過Python的語法或pandas的方法將數據存為csv這樣的文件。
當然你可能發現爬回來的數據並不是干凈的,可能會有缺失、錯誤等等,你還需要對數據進行清洗,可以學習pandas包的基本用法來做數據的預處理,得到更干凈的數據。
三
學習scrapy,搭建工程化的爬蟲
掌握前面的技術一般量級的數據和代碼基本沒有問題了,但是在遇到非常復雜的情況,可能仍然會力不從心,這個時候,強大的scrapy框架就非常有用了。
scrapy是一個功能非常強大的爬蟲框架,它不僅能便捷地構建request,還有強大的selector能夠方便地解析response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。
學會scrapy,你可以自己去搭建一些爬蟲框架,你就基本具備爬蟲工程師的思維了。
四
學習資料庫基礎,應對大規模數據存儲
爬回來的數據量小的時候,你可以用文檔的形式來存儲,一旦數據量大了,這就有點行不通了。所以掌握一種資料庫是必須的,學習目前比較主流的MongoDB就OK。
MongoDB可以方便你去存儲一些非結構化的數據,比如各種評論的文本,圖片的鏈接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。
因為這里要用到的資料庫知識其實非常簡單,主要是數據如何入庫、如何進行提取,在需要的時候再學習就行。
五
掌握各種技巧,應對特殊網站的反爬措施
當然,爬蟲過程中也會經歷一些絕望啊,比如被網站封IP、比如各種奇怪的驗證碼、userAgent訪問限制、各種動態載入等等。
遇到這些反爬蟲的手段,當然還需要一些高級的技巧來應對,常規的比如訪問頻率控制、使用代理IP池、抓包、驗證碼的OCR處理等等。
往往網站在高效開發和反爬蟲之間會偏向前者,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧,絕大部分的網站已經難不到你了.
六
分布式爬蟲,實現大規模並發採集
爬取基本數據已經不是問題了,你的瓶頸會集中到爬取海量數據的效率。這個時候,相信你會很自然地接觸到一個很厲害的名字:分布式爬蟲。
分布式這個東西,聽起來很恐怖,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握Scrapy+MongoDB+Redis這三種工具。
Scrapy前面我們說過了,用於做基本的頁面爬取,MongoDB用於存儲爬取的數據,Redis則用來存儲要爬取的網頁隊列,也就是任務隊列。
所以有些東西看起來很嚇人,但其實分解開來,也不過如此。當你能夠寫分布式的爬蟲的時候,那麼你可以去嘗試打造一些基本的爬蟲架構了,實現一些更加自動化的數據獲取。
你看,這一條學習路徑下來,你已然可以成為老司機了,非常的順暢。所以在一開始的時候,盡量不要系統地去啃一些東西,找一個實際的項目(開始可以從豆瓣、小豬這種簡單的入手),直接開始就好。
因為爬蟲這種技術,既不需要你系統地精通一門語言,也不需要多麼高深的資料庫技術,高效的姿勢就是從實際的項目中去學習這些零散的知識點,你能保證每次學到的都是最需要的那部分。
當然唯一麻煩的是,在具體的問題中,如何找到具體需要的那部分學習資源、如何篩選和甄別,是很多初學者面臨的一個大問題。
以上就是我的回答,希望對你有所幫助,望採納。
python爬蟲一秒鍾最快爬多少條數據我見過3秒鍾喝完一「瓶」啤酒的人,也見過一小時才喝完一「杯」啤酒的人;
我見過一口吃完像巴掌大的麵包的人,也見過幾天才吃完像手指頭大的麵包;
——————我是一條可愛的分割線——————
回到正題:
爬蟲能爬多少,能爬多快。取決於演算法和網速。當然,說白了還是和工程師自己的實力有關。
#好的爬蟲一秒可以爬上萬條數據,
#有的爬蟲一天只能爬一條。
print「人生苦短,python當歌」
結語:以上就是首席CTO筆記為大家介紹的關於python爬蟲一次可爬多少的全部內容了,希望對大家有所幫助,如果你還想了解更多這方面的信息,記得收藏關注本站。
Ⅱ 學習爬蟲到什麼地步才能接單
學習爬蟲必須要中級以上的地步才能接單。
我們將爬蟲技術分為三段,分別是初中高級。那麼需要到達中級以上才能接單,如果僅憑著初級的爬蟲技術來接單,一來實力不足不能滿足甲方需求,二來就算能做成一單也不能做成第二單,無法形成正向的循環。
中級爬蟲的水平可以算是職業爬蟲師的基本水平,除了初級爬蟲的知識點之外,還應該掌握以下一些知識點:
1、爬取方式
當你的requests 不頂用的時候,你就應該想到數據來源可能是Ajax,你去分析網站的時候就得懂JavaScript;如果想繞過分析Ajax和一些JavaScript邏輯的過程來爬取數據,我們就得用 Puppeteer、Pyppeteer、Selenium、Splash等來模擬瀏覽器的方式來爬取。
2、爬取速度
除了爬取方式,還有爬取速度,這時候你就得有多進程、多線程、協程的知識儲備了。
3、爬APP
如果你只會網頁爬蟲,那你還算不上中級爬蟲的水平,你還得會爬APP,APP也占據著半壁江山。這個時候你就得會Charles、Fiddler抓包了,抓到之後拿來模擬就行;如果介面被加密了,可以用 mitmproxy直接監聽介面數據或者走Hook,比如上Xposed也可以拿到。
爬蟲簡介:
網路爬蟲是一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。傳統爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統的一定停止條件。
聚焦爬蟲的工作流程較為復雜,需要根據一定的網頁分析演算法過濾與主題無關的鏈接,保留有用的鏈接並將其放入等待抓取的URL隊列。然後,它將根據一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重復上述過程,直到達到系統的某一條件時停止。
另外,所有被爬蟲抓取的網頁將會被系統存貯,進行一定的分析、過濾,並建立索引,以便之後的查詢和檢索;對於聚焦爬蟲來說,這一過程所得到的分析結果還可能對以後的抓取過程給出反饋和指導。