1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      如何用PHP采集知乎數(shù)據(jù) PHP數(shù)據(jù)采集

      php采集大數(shù)據(jù)的方案

      1、建議你讀寫數(shù)據(jù)和下載圖片分開,各用不同的進(jìn)程完成。

      創(chuàng)新互聯(lián)公司秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站,小程序設(shè)計(jì),網(wǎng)頁設(shè)計(jì)制作,移動網(wǎng)站建設(shè)營銷型網(wǎng)站建設(shè)幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長。

      比如說,取數(shù)據(jù)用get-data.php,下載圖片用get-image.php。

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

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

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

      (1)安裝gearman worker。

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

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

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

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

      * * * * * 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 但是采集登錄后的網(wǎng)頁是空白

      知乎的程序是加密的,用PHP模擬登錄采集數(shù)據(jù)只能應(yīng)用于一些沒有加密數(shù)據(jù)的網(wǎng)站。所以你登錄采集到的是空白也是正常。

      php 百度 知道數(shù)據(jù)采集

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

      1.在百度知道中,輸入linux,然后會出現(xiàn)列表。復(fù)制瀏覽器地址欄內(nèi)容。

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

      當(dāng)然這個是笨方法。

      2.使用php的file或者file_get_contents函數(shù),獲取鏈接URL的內(nèi)容。

      3.通過php正則表達(dá)式,獲取你需要的3個字段內(nèi)容。

      4.寫入數(shù)據(jù)庫。

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

      建議也就抓10頁數(shù)據(jù)。

      其實(shí)不難,你肯定寫的出來。 還有,網(wǎng)上應(yīng)該有很多抓取工具,你找找看,然后將抓下來的數(shù)據(jù)

      在做分析。寫入數(shù)據(jù)庫。

      php模擬登陸知乎

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

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

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

      當(dāng)然比較蛋疼的問題就是網(wǎng)頁編碼問題,經(jīng)常爬過來全是亂碼,網(wǎng)上找找看轉(zhuǎn)碼的方法,都試一下,這是一門玄學(xué),能不能成功看你人品和耐心吧。

      如何利用python 爬取知乎上面的數(shù)據(jù)

      #!/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'

      }

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

      dicc = {"offset":60}

      n=20

      b=0

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

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

      # 訪問是的headers那些信息添加上,發(fā)現(xiàn)還是拒絕訪問。

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

      #所以補(bǔ)上其他的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的字典是有區(qū)別的,需要轉(zhuǎn)換

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

      # print json.dumps(dicc)

      # print dicc

      circle = requests.post("",

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

      #response內(nèi)容 其實(shí)爬過一次之后就大同小異了。 都是

      #問題返回的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串需要自己 轉(zhuǎn)換成字典后使用

      jsondict = json.loads(circle.text)

      msgstr = jsondict['msg']

      # print len(msgstr)

      #根據(jù)自己所需要的提取信息規(guī)則寫出正則表達(dá)式

      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

      #當(dāng)問題已經(jīng)訪問完后再傳參數(shù) 拋出異常 此時退出循環(huán)

      except Exception, e:

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

      break


      當(dāng)前標(biāo)題:如何用PHP采集知乎數(shù)據(jù) PHP數(shù)據(jù)采集
      文章來源:http://www.ef60e0e.cn/article/dodsgie.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        吴江市| 迁安市| 伊春市| 尚义县| 汉寿县| 长沙市| 封丘县| 漳州市| 乌兰县| 峨眉山市| 诸城市| 东乡| 古丈县| 石城县| 察隅县| 锦州市| 宜昌市| 岐山县| 大姚县| 青岛市| 兴安县| 施甸县| 田林县| 林西县| 广灵县| 台南市| 旺苍县| 赣榆县| 遵义县| 汝南县| 阿鲁科尔沁旗| 巴彦淖尔市| 阿图什市| 湘乡市| 张家界市| 仪陇县| 视频| 铁力市| 丽江市| 巫溪县| 竹北市|