如何用PHP采集知乎數據 PHP數據采集

php采集大數據的方案

1、建議你讀寫數據和下載圖片分開,各用不同的進程完成。

創新互聯公司秉承實現全網價值營銷的理念,以專業定制企業官網,網站設計制作、做網站,小程序設計,網頁設計制作,移動網站建設營銷型網站建設幫助傳統企業實現“互聯網+”轉型升級專業定制企業官網,公司注重人才、技術和管理,匯聚了一批優秀的互聯網技術人才,對客戶都以感恩的心態奉獻自己的專業和所長。

比如說,取數據用get-data.php,下載圖片用get-image.php。

2、多進程的話,php可以簡單的用pcntl_fork()。這樣可以并發多個子進程。

但是我不建議你用fork,我建議你安裝一個gearman worker。這樣你要并發幾個,就啟幾個worker,寫代碼簡單,根本不用在代碼里考慮thread啊,process等等。

3、綜上,解決方案這樣:

(1)安裝gearman worker。

(2)寫一個get-data.php,在crontab里設置它每5分鐘執行一次,只負責讀數據,然后把讀回來的數據一條一條的扔到 gearman worker的隊列里;

然后再寫一個處理數據的腳本作為worker,例如叫process-data.php,這個腳本常駐內存。它作為worker從geraman 隊列里讀出一條一條的數據,然后跟你的數據庫老數據比較,進行你的業務邏輯。如果你要10個并發,那就啟動10個process-data.php好了。處理完后,如果圖片地址有變動需要下載圖片,就把圖片地址扔到 gearman worker的另一個隊列里。

(3)再寫一個download-data.php,作為下載圖片的worker,同樣,你啟動10個20個并發隨便你。這個進程也常駐內存運行,從gearman worker的圖片數據隊列里取數據出來,下載圖片

4、常駐進程的話,就是在代碼里寫個while(true)死循環,讓它一直運行好了。如果怕內存泄露啥的,你可以每循環10萬次退出一下。然后在crontab里設置,每分鐘檢查一下進程有沒有啟動,比如說這樣啟動3個process-data worker進程:

* * * * * flock -xn /tmp/process-data.1.lock -c '/usr/bin/php /process-data.php /dev/null 21'

* * * * * flock -xn /tmp/process-data.2.lock -c '/usr/bin/php /process-data.php /dev/null 21'

* * * * * flock -xn /tmp/process-data.3.lock -c '/usr/bin/php /process-data.php /dev/null 21'

不知道你明白了沒有

php模擬登陸 知乎 顯示了登錄成功的unicode 但是采集登錄后的網頁是空白

知乎的程序是加密的,用PHP模擬登錄采集數據只能應用于一些沒有加密數據的網站。所以你登錄采集到的是空白也是正常。

php 百度 知道數據采集

問題其實不難,自己都能寫。給你幾個思路吧:

1.在百度知道中,輸入linux,然后會出現列表。復制瀏覽器地址欄內容。

然后翻頁,在復制地址欄內容,看看有什么不同,不同之處,就是你要循環分頁的i值。

當然這個是笨方法。

2.使用php的file或者file_get_contents函數,獲取鏈接URL的內容。

3.通過php正則表達式,獲取你需要的3個字段內容。

4.寫入數據庫。

需要注意的是,百度知道有可能做了防抓取的功能,你剛一抓幾個頁面,可能會被禁止。

建議也就抓10頁數據。

其實不難,你肯定寫的出來。 還有,網上應該有很多抓取工具,你找找看,然后將抓下來的數據

在做分析。寫入數據庫。

php模擬登陸知乎

這種模擬登陸其實很簡單,php的話主要用curl來實現。仔細研究一下你要抓的站具體是怎么實現用戶登錄的,可以用wireshark或者burpsuite(建議用后者)抓包看看整個過程都有那幾次請求,每次請求都發送了哪些數據,構造好發給他就可以實現登錄了。

之后獲取個人信息就很容易了,找找php解析html庫,或者最簡單粗暴的就是字符串截取函數加正則表達式,把你想要的數據提取出來就好了。

對于你給出的這種驗證碼屬于非常容易識別的驗證碼了,基本的識別原理參看使用Canvas進行驗證碼識別。

當然比較蛋疼的問題就是網頁編碼問題,經常爬過來全是亂碼,網上找找看轉碼的方法,都試一下,這是一門玄學,能不能成功看你人品和耐心吧。

如何利用python 爬取知乎上面的數據

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Author: Administrator

# @Date: 2015-10-31 15:45:27

# @Last Modified by: Administrator

# @Last Modified time: 2015-11-23 16:57:31

import requests

import sys

import json

import re

reload(sys)

sys.setdefaultencoding('utf-8')

#獲取到匹配字符的字符串

def find(pattern,test):

finder = re.search(pattern, test)

start = finder.start()

end = finder.end()

return test[start:end-1]

cookies = {

'_ga':'GA1.2.10sdfsdfsdf', '_za':'8d570b05-b0b1-4c96-a441-faddff34',

'q_c1':'23ddd234234',

'_xsrf':'234id':'"ZTE3NWY2ZTsdfsdfsdfWM2YzYxZmE=|1446435757|15fef3b84e044c122ee0fe8959e606827d333134"',

'z_c0':'"QUFBQXhWNGZsdfsdRvWGxaeVRDMDRRVDJmSzJFN1JLVUJUT1VYaEtZYS13PT0=|14464e234767|57db366f67cc107a05f1dc8237af24b865573cbe5"',

'__utmt':'1', '__utma':'51854390.109883802f8.1417518721.1447917637.144c7922009.4',

'__utmb':'518542340.4.10.1447922009', '__utmc':'51123390', '__utmz':'5185435454sdf06.1.1.utmcsr=zhihu.com|utmcgcn=(referral)|utmcmd=referral|utmcct=/',

'__utmv':'51854340.1d200-1|2=registration_date=2028=1^3=entry_date=201330318=1'}

headers = {'user-agent':

'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36',

'referer':'',

'host':'','Origin':'',

'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',

'Connection':'keep-alive','X-Requested-With':'XMLHttpRequest','Content-Length':'81',

'Accept-Encoding':'gzip,deflate','Accept-Language':'zh-CN,zh;q=0.8','Connection':'keep-alive'

}

#多次訪問之后,其實一加載時加載20個問題,具體參數傳輸就是offset,以20遞增

dicc = {"offset":60}

n=20

b=0

# 與爬取圖片相同的是,往下拉的時候也會發送http請求返回json數據,但是不同的是,像模擬登錄首頁不同的是除了

# 發送form表單的那些東西后,知乎是拒絕了我的請求了,剛開始以為是headers上的攔截,往headers添加瀏覽器

# 訪問是的headers那些信息添加上,發現還是拒絕訪問。

#想了一下,應該是cookie原因。這個加載的請求和模擬登錄首頁不同

#所以補上其他的cookies信息,再次請求,請求成功。

for x in xrange(20,460,20):

n = n+20

b = b+20

dicc['offset'] = x

formdata = {'method':'next','params':'{"offset":20}','_xsrf':'20770d88051f0f45e941570645f5e2e6'}

#傳輸需要json串,和python的字典是有區別的,需要轉換

formdata['params'] = json.dumps(dicc)

# print json.dumps(dicc)

# print dicc

circle = requests.post("",

cookies=cookies,data=formdata,headers=headers)

#response內容 其實爬過一次之后就大同小異了。 都是

#問題返回的json串格式

# {"r":0,

# "msg": ["div class=\"zm-profile-section-item zg-clear\"\n

# span class=\"zm-profile-vote-count\"\ndiv class=\"zm-profile-vote-num\"205K\/div\n

# div class=\"zm-profile-vote-type\"\u6d4f\u89c8\/div\n

# \/span\ndiv class=\"zm-profile-section-main\"\n

# h2 class=\"zm-profile-question\"\n

# a class=\"question_link\" target=\"_blank\" href=\"\/question\/21719532\"

# \u4ec0\u4e48\u4fc3\u4f7f\u4f60\u8d70\u4e0a\u72ec\u7acb\u5f00\u53d1\u8005\u4e4b\u8def\uff1f\/a\n

# \/h2\ndiv class=\"meta zg-gray\"\na data-follow=\"q:link\" class=\"follow-link zg-unfollow meta-item\"

# href=\"javascript:;\" id=\"sfb-868760\"

# i class=\"z-icon-follow\"\/i\u53d6\u6d88\u5173\u6ce8\/a\nspan class=\"zg-bull\"?\/span\n63 \u4e2a\u56de\u7b54\nspan class=\"zg-bull\"?\/span\n3589 \u4eba\u5173\u6ce8\n\/div\n\/div\n\/div",

# "div class=\"zm-profile-section-item zg-clear\"\n

# span class=\"zm-profile-vote-count\"\n

# div class=\"zm-profile-vote-num\"157K\/div\n

# div class=\"zm-profile-vote-type\"\u6d4f\u89c8\/div\n

# \/span\ndiv class=\"zm-profile-section-main\"\n

# h2 class=\"zm-profile-question\"\n

# a class=\"question_link\" target=\"_blank\" href=\"\/question\/31764065\"

# \u672c\u79d1\u6e23\u6821\u7684\u5b66\u751f\u5982\u4f55\u8fdb\u5165\u7f8e\u5e1d\u725b\u6821\u8bfbPhD\uff1f\/a\n

# \/h2\ndiv class=\"meta zg-gray\"\n

# a data-follow=\"q:link\" class=\"follow-link zg-unfollow meta-item\" href=\"javascript:;\" id=\"sfb-4904877\"

# i class=\"z-icon-follow\"\/i\u53d6\u6d88\u5173\u6ce8\/a\nspan class=\"zg-bull\"?

# \/span\n112 \u4e2a\u56de\u7b54\nspan class=\"zg-bull\"?\/span\n1582 \u4eba\u5173\u6ce8\n

# \/div\n\/div\n\/div"]}

# print circle.content

#同樣json串需要自己 轉換成字典后使用

jsondict = json.loads(circle.text)

msgstr = jsondict['msg']

# print len(msgstr)

#根據自己所需要的提取信息規則寫出正則表達式

pattern = 'question\/.*?/a'

try:

for y in xrange(0,20):

wholequestion = find(pattern, msgstr[y])

pattern2 = '.*?'

finalquestion = find(pattern2, wholequestion).replace('','')

print str(b+y)+" "+finalquestion

#當問題已經訪問完后再傳參數 拋出異常 此時退出循環

except Exception, e:

print "全部%s個問題" %(b+y)

break

當前名稱:如何用PHP采集知乎數據 PHP數據采集
標題鏈接:http://m.kartarina.com/article4/dodsgie.html

成都網站建設公司_創新互聯,為您提供企業建站網站改版定制網站面包屑導航全網營銷推廣建站公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司
主站蜘蛛池模板: 亚洲精品无码国产| 一本一道中文字幕无码东京热| 日韩毛片免费无码无毒视频观看| 无码粉嫩小泬无套在线观看| 精品无码久久久久国产| 亚洲熟妇无码AV不卡在线播放| 精品久久久久久无码中文字幕漫画| 精品人体无码一区二区三区| 亚洲欧洲无码AV电影在线观看| 国产在线精品无码二区| 色欲A∨无码蜜臀AV免费播| 亚洲AV无码一区二三区| 国产Av激情久久无码天堂| 男人av无码天堂| 无码精品久久一区二区三区| 中文字幕乱偷无码av先锋蜜桃| 一本大道无码日韩精品影视_| 久久精品中文字幕无码| 亚洲精品国产日韩无码AV永久免费网| 西西4444www大胆无码| 无码人妻精品一区二区三区久久 | 在线a亚洲v天堂网2019无码| 在线观看无码AV网址| 免费一区二区无码东京热| 99久无码中文字幕一本久道| 黑人巨大无码中文字幕无码| 亚洲不卡中文字幕无码| 亚洲AV蜜桃永久无码精品| 久久久久亚洲AV无码麻豆| 亚洲AV无码AV男人的天堂| 无码8090精品久久一区| 亚洲AV无码成人网站在线观看| 人妻无码视频一区二区三区| 精品少妇人妻av无码专区| 麻豆国产精品无码视频| 少妇人妻无码专区视频| 蜜臀亚洲AV无码精品国产午夜.| 久久精品无码专区免费东京热| 国产综合无码一区二区辣椒| 精品人妻无码一区二区三区蜜桃一| 无码欧精品亚洲日韩一区|