當(dāng)然要是頁面結(jié)構(gòu)復(fù)雜,正則表達(dá)式寫得巨復(fù)雜,尤其是用過那些支持xpath的類庫/爬蟲庫后,就會(huì)發(fā)現(xiàn)此種方式雖然入門門檻低,但擴(kuò)展性、可維護(hù)性等都奇差。因此此種情況下還是推薦采用一些現(xiàn)成的爬蟲庫,諸如xpath、多線程支持還是必須考慮的因素。
成都創(chuàng)新互聯(lián)是一家專業(yè)提供濮陽縣企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站建設(shè)、html5、小程序制作等業(yè)務(wù)。10年已為濮陽縣眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
你可以去后盾人平臺(tái)看看,里面的東西不錯(cuò)
使用Python做爬蟲是很廣泛的應(yīng)用場(chǎng)景,那就涉及到了Python是如何獲取接口數(shù)據(jù)的呢?Python擁有很多很強(qiáng)大的類庫,使用urllib即可輕松獲取接口返回的數(shù)據(jù)。
...展開
工具原料Python開發(fā)工具url接口,用于請(qǐng)求獲取數(shù)據(jù)
方法/步驟分步閱讀
1
/4
首先新建一個(gè)py文件,導(dǎo)入所需的類庫,urllib,json等。
2
/4
聲明api的url地址,和構(gòu)造請(qǐng)求頭。
3
/4
使用urlopen方法發(fā)起請(qǐng)求并獲取返回的數(shù)據(jù)。
4
/4
最后就是對(duì)返回字符串的處理了。比如字符串的截取,字符串的轉(zhuǎn)換成json對(duì)象,轉(zhuǎn)換成字段,再獲取對(duì)應(yīng)key的值。
使用Python3實(shí)現(xiàn)HTTP get方法。使用聚合數(shù)據(jù)的應(yīng)用編程接口,你可以調(diào)用小發(fā)貓AI寫作API。這是一個(gè)免費(fèi)的應(yīng)用程序接口,先上代碼,詳細(xì)說明寫在后面:
1
2
3
4
5
6
7
8
9
10
11
12
import requests
import time
import re
se = requests.session()
if __name__ == '__main__':
Post_url = ";v=1key=xxxxxx" #自己想辦法弄到key
Post_data = {
'wenzhang': '床前明月光,疑是地上霜。'
}
Text = se.post(Post_url, data=Post_data).text.replace("'", '"').replace('/ ', '/')
print(Text)
首先,什么是原料藥?應(yīng)用編程接口的全稱也稱為應(yīng)用編程接口。它簡稱為應(yīng)用編程接口。當(dāng)我第一次接觸接口調(diào)用時(shí),我不知道寫什么,因?yàn)槲铱戳苏麄€(gè)項(xiàng)目。這個(gè)項(xiàng)目是由龍卷風(fēng)寫的??戳税胩忑埦盹L(fēng)后,我發(fā)現(xiàn)我走錯(cuò)了方向。我只是直接看著界面,因?yàn)闆]有人告訴我項(xiàng)目的整個(gè)過程。我不得不強(qiáng)迫自己去看它。我所要做的就是找到程序的主入口,然后根據(jù)函數(shù)一步一步地調(diào)用它。
當(dāng)我編寫接口時(shí),因?yàn)槲冶仨毰浜虾笈_(tái)編寫和瀏覽器訪問,每次訪問只需要傳入相應(yīng)的參數(shù)來調(diào)用相應(yīng)的接口。界面可以由他人編寫,也可以由合作公司提供。當(dāng)然,合作公司提供的不是免費(fèi)的。現(xiàn)在基本上,如果我不訪問它一次,它只收費(fèi)幾美分。當(dāng)你聽到這些,不要低估這幾分。有時(shí)候如果你打了幾百萬次電話,會(huì)花很多錢。有些人認(rèn)為,我們不能按月付款嗎?對(duì)不起,我不知道??傊?,我們一個(gè)接一個(gè)地計(jì)算,因?yàn)榈谝淮?,我認(rèn)為我買的那些直接買了我們想要的所有數(shù)據(jù),把它們保存在本地?cái)?shù)據(jù)庫中,當(dāng)我使用它們時(shí),直接從我自己的數(shù)據(jù)庫中轉(zhuǎn)移它們。后來,我發(fā)現(xiàn)我想得太多了,偽原創(chuàng)API。
該接口調(diào)用由python的請(qǐng)求庫訪問,它基本上是一個(gè)get或post請(qǐng)求。有些接口是加密的,然后我們必須用另一方提供給我們的公鑰加密或解密,然后用相應(yīng)的參數(shù)訪問。我們想要的數(shù)據(jù)基本上是在請(qǐng)求后返回的結(jié)果中以json格式解析的。因此,在請(qǐng)求之后,我們可以用請(qǐng)求提供的json函數(shù)來解析它,然后提取數(shù)據(jù)以一次訪問一個(gè)數(shù)據(jù)。
沒錯(cuò),接口調(diào)用就是這么簡單,但是有了后臺(tái)編寫,我才發(fā)現(xiàn)請(qǐng)求庫現(xiàn)在有多強(qiáng)大,只要它是http或https,我很高興我在一周內(nèi)讀完了請(qǐng)求和bs4,我真的不打電話給爬蟲工程師,如果我是爬蟲的時(shí)候不學(xué)習(xí)請(qǐng)求,你能用scrapy寫4=dead來寫它嗎?Urllib的單詞基本上被刪除了。如果你有要求,為什么要用這個(gè)?
其實(shí)用PHP來爬會(huì)非常方便,主要是PHP的正則表達(dá)式功能在搜集頁面連接方面很方便,另外PHP的fopen、file_get_contents以及l(fā)ibcur的函數(shù)非常方便的下載網(wǎng)頁內(nèi)容。
具體處理方式就是建立就一個(gè)任務(wù)隊(duì)列,往隊(duì)列里面插入一些種子任務(wù)和可以開始爬行,爬行的過程就是循環(huán)的從隊(duì)列里面提取一個(gè)URL,打開后獲取連接插入隊(duì)列中,進(jìn)行相關(guān)的保存。隊(duì)列可以使用數(shù)組實(shí)現(xiàn)。
當(dāng)然PHP作為但線程的東西,慢慢爬還是可以,怕的就是有的URL打不開,會(huì)死在那里。
pcntl_fork或者swoole_process實(shí)現(xiàn)多進(jìn)程并發(fā)。按照每個(gè)網(wǎng)頁抓取耗時(shí)500ms,開200個(gè)進(jìn)程,可以實(shí)現(xiàn)每秒400個(gè)頁面的抓取。
curl實(shí)現(xiàn)頁面抓取,設(shè)置cookie可以實(shí)現(xiàn)模擬登錄
simple_html_dom 實(shí)現(xiàn)頁面的解析和DOM處理
如果想要模擬瀏覽器,可以使用casperJS。用swoole擴(kuò)展封裝一個(gè)服務(wù)接口給PHP層調(diào)用
在這里有一套爬蟲系統(tǒng)就是基于上述技術(shù)方案實(shí)現(xiàn)的,每天會(huì)抓取幾千萬個(gè)頁面。