彰化一整天的論壇

 找回密碼
 立即註冊
查看: 800|回復: 16

有關PHP爬蟲

[複製鏈接]
發表於 2017-4-10 16:39:11 | 顯示全部樓層 |閱讀模式
大家不好意思,我是PHP的初心者
以下這個CODE是我找資料看到某版主PO的
但我其實看不懂她的<TITLE>那些的~~
想問大家如果我想要爬一個網站~~
且我有他那個DIV區塊的ID
而且大概ID有五個好了
我只想要每次爬那個頁面的時候 把我要找的部分的DIV在印到我自己的網站中
這樣要如何改寫這個CODE呢
例如我的關鍵字是"arsen"和 "arsome"
兩個關鍵字 例如只出現在第一個第二個ID裡面 但後面三個卻沒有
所以我只需要回傳這兩個ID的資料到我網站上,請問該如何做呢?


$http="某網址"; //您想抓取的網址
$buffer = file($http); //將網址讀入buffer變數
for($i=0;$i<sizeof($buffer);$i++) //將每段文字讀出來,以換行為單位,sizeof會傳回共有幾筆
{
$n1=strpos(" ".$buffer[$i],"<title>"); //檢查你要找的字,是否存在,假設我想找<title>中的內容為何,為什麼前面要加空白,因為如果找到位置如果是第一個位置是0,0跟找不到在判斷會有問題
if($n1>0)
{
  $n2=strrpos($buffer[$i],"</title>"); //找出</title>的位置
  $title=substr($buffer[$i],$n1+6,$n2-$n1-6); //+6的意思是<title>的長度減掉前面的一個空白,-6的話是把長度減掉
//utf-8 轉 big5
  $title=iconv("UTF-8","big5",$title);
  echo $title."<br>\n"; //將title的內容值印出\n代表顯示原始碼的時候會換行,<BR>是brower顯示會換行   

}
}

回復

使用道具 舉報

發表於 2017-4-10 16:51:46 | 顯示全部樓層
您用檢視原始碼,找到您要找的關鍵字.
title是網頁的標題,您可以透過底下網頁去了解.
https://www.w3schools.com/tags/tag_title.asp
HTML <title> Tag
您可以提供您要抓取的網站,我要看html內容才有辦法給您意見.
php_title_01.jpg

1.黃色是我程式所要抓取的內容

回復 支持 反對

使用道具 舉報

 樓主| 發表於 2017-4-10 17:35:55 | 顯示全部樓層
imingho 發表於 2017-4-10 16:51
您用檢視原始碼,找到您要找的關鍵字.
title是網頁的標題,您可以透過底下網頁去了解.
https://www.w3schools ...

妳好~~感謝妳的回覆!
我想要的是這個網址
AAAA.......://AAA.yeastgenome.org/locus/YML007W/overview
記得把前面的AAAA.......改成http 還有後面的AAA改成www
我只要在以下四個ID搜尋是否有我的關鍵字
1.overview
2.go
3.phenotype
4.paragraph
例如我要的關鍵字是ˋarsenic~~出現在某一個ID裡面我就想要在自己網站PRINT出那個ID的資料
感謝您的回覆
回復 支持 反對

使用道具 舉報

發表於 2017-4-10 22:04:07 | 顯示全部樓層
張永謚 發表於 2017-4-10 17:35
妳好~~感謝妳的回覆!
我想要的是這個網址
AAAA.......://AAA.yeastgenome.org/locus/YML007W/overview

請問您底下是您要抓的內容嗎?
若不是,麻煩您抓圖說明.謝謝..
yeastgenome_id_01.jpg

1.黃色是您要抓取的嗎?

回復 支持 反對

使用道具 舉報

 樓主| 發表於 2017-4-10 23:45:14 | 顯示全部樓層
本帖最後由 張永謚 於 2017-4-10 23:46 編輯
imingho 發表於 2017-4-10 22:04
請問您底下是您要抓的內容嗎?
若不是,麻煩您抓圖說明.謝謝..
1.黃色是您要抓取的嗎?

未命名.jpg
沒錯~~但我要抓整個section的code~~~以上面這個id=overview為例 整個資料都要抓到 (假使他此ID內有出現我要的關鍵字 arsenic或arsentic或arsenate)
我舉一個例子好了(下圖)~~這個id為go的就有出現arsenic所以就要把這個整個抓下來
go.jpg
如果有敘述不明確 請在告知我謝謝~~
回復 支持 反對

使用道具 舉報

發表於 2017-4-11 09:54:31 | 顯示全部樓層
張永謚 發表於 2017-4-10 23:45
沒錯~~但我要抓整個section的code~~~以上面這個id=overview為例 整個資料都要抓到 (假使他此ID內有出現我 ...

我幫您寫一個範例給您看.剩下的您自行修改.不懂再提出.
php_find_id_01.jpg


  1. <?php
  2. $http="http://www.yeastgenome.org/locus/YML007W/overview"; //您想抓取的網址
  3. $buffer = file($http); //將網址讀入buffer變數
  4. for($i=0;$i<sizeof($buffer);$i++) //將每段文字讀出來,以換行為單位,sizeof會傳回共有幾筆
  5. {
  6.         $n1fisrt=strpos(" ".$buffer[$i],"<section id=\"go\">"); //檢查你要找的字,是否存在,假設我想找<section id="go">中的內容為何,為什麼前面要加空白,因為如果找到位置如果是第一個位置是0,0跟找不到在判斷會有問題
  7.         if($n1fisrt>0)
  8.         {
  9.                 $n1isFind=true;
  10.                 echo "F".$i."<br/>";
  11.         }
  12.     $n1find=strrpos(" ".$buffer[$i],"arsenic"); //找出arsenic的位置
  13.         if($n1find>0 && $n1isFind==true)
  14.         {
  15.            $s=$buffer[$i];        
  16.            echo $s."<br>\n"; //將找到的那一行換行,<BR>是brower顯示會換行   
  17.         }
  18.         $n1end=strpos(" ".$buffer[$i],"</section>");       
  19.         if($n1end>0 && $n1isFind>0)
  20.         {
  21.                 $n1isFind=false;
  22.                 echo "E".$i."<br/>";
  23.         }

  24. }
  25. ?>
複製代碼

回復 支持 反對

使用道具 舉報

 樓主| 發表於 2017-4-11 12:31:28 | 顯示全部樓層
感謝您的回覆,不好意思我有個問題是~~ 原本要爬的網址如果把網址裡面的YML007W改成YPR201W後
然後我要搜尋關鍵字 As(III) 且id是reference 卻搜尋不到 ~~但那個網頁裡確實有As(III)
不知道是哪邊出了問題呢?
擷取.PNG
回復 支持 反對

使用道具 舉報

發表於 2017-4-11 13:12:01 | 顯示全部樓層
張永謚 發表於 2017-4-11 12:31
感謝您的回覆,不好意思我有個問題是~~ 原本要爬的網址如果把網址裡面的YML007W改成YPR201W後
...

您好,
     您要上傳您寫的程式碼,我才有辦法幫您看.

程式碼張貼請參考:
如何在discuz張貼程式碼
http://discuz.bestdaylong.com/fo ... 30239&fromuid=2
(出處: 彰化一整天的論壇)
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2017-4-11 13:20:06 | 顯示全部樓層
imingho 發表於 2017-4-11 13:12
您好,
     您要上傳您寫的程式碼,我才有辦法幫您看.
  1. $http="(HTTP)://改成(WWW).yeastgenome.org/locus/YPR201W/overview"; //您想抓取的網址
  2.                                 $buffer = file($http); //將網址讀入buffer變數
  3.                                  $n1isFind="";
  4.                                 for($i=0;$i<sizeof($buffer);$i++) //將每段文字讀出來,以換行為單位,sizeof會傳回共有幾筆
  5.                                 {               

  6.                                         $n1fisrt=strpos(" ".$buffer[$i],"<section id=\"reference\">"); //檢查你要找的字,是否存在,假設我想找<section id="go">中的內容為何,為什麼前面要加空白,因為如果找到位置如果是第一個位置是0,0跟找不到在判斷會有問題
  7.                                         if($n1fisrt>0)
  8.                                         {
  9.                                                 $n1isFind=true;
  10.                                                 echo "F".$i."<br/>";
  11.                                         }
  12.                                                    $n1find=(strrpos(" ".$buffer[$i],"arsenite") or strrpos(" ".$buffer[$i],"arsenate") or strrpos(" ".$buffer[$i],"arsenic") or strrpos(" ".$buffer[$i],"As(III)")); //找出arsenic的位置
  13.                                         if($n1find>0 && $n1isFind==true)
  14.                                         {
  15.                                            $s=$buffer[$i];         
  16.                                            echo $s."<br>\n"; //將找到的那一行換行,<BR>是brower顯示會換行   
  17.                                         }
  18.                                         $n1end=strpos(" ".$buffer[$i],"</section>");        
  19.                                         if($n1end>0 && $n1isFind>0)
  20.                                         {
  21.                                                 $n1isFind=false;
  22.                                                 echo "E".$i."<br/>";
  23.                                         }
  24. }
複製代碼

目前是這樣~~~但AS(III)卻找不到
但這個ID裡面確實有AS(III)
回復 支持 反對

使用道具 舉報

發表於 2017-4-11 13:27:15 | 顯示全部樓層
張永謚 發表於 2017-4-11 13:20
目前是這樣~~~但AS(III)卻找不到
但這個ID裡面確實有AS(III)

您要看原始碼才會知道為什麼找不到.原始碼的裡面是沒資料的.
還有您可以用小畫家像我一樣,把要強調的劃出來.
php_find_id_02.jpg

1.中間沒有任何資料

回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

 ㄚ母滴雞湯
 員林香純滴雞精

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)  |网站地图

GMT+8, 2019-8-24 09:34 , Processed in 0.153294 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表