# 設定 請求超時時間
# 1. 單一值 (同時設定connect和read)
requests::set_timeout(10);
# 2. 陣列值 (設定connect和read二者的timeout)
requests::set_timeout( array(3, 27) );
# 設定 請求代理
1. 字串
requests::set_proxy('http://user:pass@host:port');
2. 陣列
requests::set_proxy(
array(
'http://user:pass@host:port',
'http://user:pass@host:port'
)
);
# 設定 UA頭
// 1. 字串
requests::set_useragent("Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/");
// 2. 陣列
requests::set_proxy(
array(
"Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/",
"Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/"
)
);
# 設定 請求來路URL
requests::set_referer('https://www.baidu.com');
# 設定 請求的Header
requests::set_header("Referer", "http://www.baidu.com");
# 新增 請求的Cookie
requests::set_cookie("BAIDUID", "FEE96299191CB0F11954F3A0060FB470:FG=1", "http://www.baidu.com");
requests::set_cookie("BAIDUID=FEE96299191CB0F11954F3A0060FB470:FG=1", "http://www.baidu.com");
# 獲取 請求的Cookie
requests::get_cookie("BAIDUID", "http://www.baidu.com");
requests::get_cookie("http://www.baidu.com");
# 設定 設定請求偽IP
// 1. 單一值
requests::set_client_ip("192.168.0.2");
// 2. 陣列
requests::set_client_ip(
array(
"192.168.0.1",
"192.168.0.2"
)
);
# 設定 請求的第三方主機和IP
requests::set_hosts(
"http://www.baidu.com",
array(
"203.195.143.21",
"203.195.143.22"
)
);
# 發起 get 請求
requests::get("https://github.com/timeline.json");
# 發起 post 請求
// 1. 登入
requests::post(
"http://www.domain.com",
array(
"username" => "test", "password" => "test"
)
);
// 2. 檔案上傳
request::post(
"http://www.domain.com",
null,
array(
"file1" => "test1.jpg",
"file2" => "test2.jpg"
)
);
# 發起 put 請求
requests::put(
"http://www.domain.com",
"{username:\"test888\",username:\"123456\"}"
);
# 發起 delete 請求
requests::delete(
"http://www.domain.com",
"{username:\"test888\"}"
);
# 載入 核心檔案
require './vendor/autoload.php';
use phpspider\core\phpspider;
# 官方文件說不要刪除這段註釋,我並不知道有什麼用,文件說加就加
/* Do NOT delete this comment */
/* 不要刪除這段註釋 */
# $configs = array(
'name' => '163新聞', // 當前爬蟲名稱
'log_show' => false, // 是否顯示日誌, 預設false, 可選 true (顯示除錯資訊) | false (顯示爬取皮膚, tail -f data/phpspider.log 檢視日誌)
'log_file' => 'data/phpspider.log', // 日誌檔案路徑, 預設 data/phpspider.log
'log_type' => '', // 顯示和記錄的日誌型別, 預設空, 可選 info(普通) | warn(警告) | debug(除錯) | error(錯誤 )
'input_encoding' => null, // 輸入編碼, 預設null(自動識別)
'output_encoding' => null, // 輸出編碼, 預設null(null=utf-8)
'tasknum' => 1, // 同時工作的爬蟲任務數, 預設1(單程式任務爬取)
'multiserver' => false, // 多伺服器處理, 預設false, 可選 true | false
'serverid' => 1, // 伺服器ID, 預設1, 啟用第二天伺服器可設定為2
'save_running_state' => false, // 儲存爬蟲執行狀態, 預設false(不儲存), 可選 true | false
'queue_config' => array( // redis 配置, 儲存爬蟲執行狀態、多工處理 和 多伺服器處理 都需要 redis 來儲存採集任務資料
'host' => '127.0.0.1',
'port' => 6379,
'pass' => '',
'db' => 5,
'prefix' => 'phpspider',
'timeout' => 30
),
'proxy' => array( // 代理伺服器,如果爬取的網站根據ip做了反爬蟲,可以設定此項
'http://host:port',
'http://user:pass@host:port',
),
'interval' => 1000, // 爬取單個網頁的時間間隔, 單位毫秒
'timeout' => 5, // 爬取每個網頁的超時時間, 單位秒
'max_try' => 0, // 爬取每個網頁失敗後嘗試次數, 預設0(不重複爬取)
'max_depth' => 0, // 爬取網頁深度, 超過深度的頁面不再採集, 預設0(不限制)
'max_fields' => 0, // 爬取內容網頁最大條數, 預設0(不限制)
'user_agent' => "", // 爬取網頁所使用的瀏覽器型別
// 1. 列舉型別
// phpspider::AGENT_ANDROID, 表示爬蟲爬取網頁時, 使用安卓手機瀏覽器
// phpspider::AGENT_IOS, 表示爬蟲爬取網頁時, 使用蘋果手機瀏覽器
// phpspider::AGENT_PC, 表示爬蟲爬取網頁時, 使用PC瀏覽器
// phpspider::AGENT_MOBILE, 表示爬蟲爬取網頁時, 使用移動裝置瀏覽器
// 2. 自定義型別
// 'user_agent' => "Mozilla/5.0"
// 3. 隨機瀏覽器型別
// 'user_agent' => array(
// "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",
// "Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G34 Safari/601.1",
// "Mozilla/5.0 (Linux; U; Android 6.0.1;zh_cn; Le X820 Build/FEXCNFN5801507014S) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/49.0.0.0 Mobile Safari/537.36 EUI Browser/5.8.015S",
// );
'client_ip' => "", // 爬取網頁所使用的偽IP,用於破解防採集
// 1. 字串型別
// 'client_ip' => '192.168.0.2'
// 2. 陣列型別
// 'client_ip' => array(
// '192.160.0.1',
// '192.160.0.2',
// );
'export' => array( // 爬取資料資料匯出
'type' => 'csv', // 匯出型別 csv | sql | db
'file' => './data/163_news.csv', // 匯出檔案路徑
// 'type' => 'sql'
// 'file' => './data/163_news.sql',
// 'table' => 'news_table', // 匯出db、sql資料庫表名
// 'type' => 'db'
// 'table' => 'news_table', // 匯出db、sql資料庫表名
),
'db_config' => array( // 資料庫配置
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'root',
'pass' => 'root',
'name' => 'demo',
),
'domains' => array( // 定義爬蟲爬取哪些域名下的網頁, 非域名下的url會被忽略以提高爬取速度
'163.com',
'new.163.com'
),
'scan_urls' => array( // 定義爬蟲的入口連結, 爬蟲從這些連結開始爬取,同時這些連結也是監控爬蟲所要監控的連結
'https://news.163.com'
),
'content_url_regexes' => array( // 定義內容頁url的規則, 正規表示式 最好填寫以提高爬取效率
'https://news.163.com/\d+/\d+/\d+/\w+.html'
),
'list_url_regexes' => array( // 定義列表頁url的規則, 對於有列表頁的網站, 使用此配置可以大幅提高爬蟲的爬取速率
'https://news.163.com/gz/page/\d+.html'
),
'fields' => array( // 定義內容頁的抽取規則, 規則由一個個field組成, 一個field代表一個資料抽取項
array(
'name' => "content", // 名稱, 不能為空
'selector' => '//*[@id="endText"]', // 定義抽取規則, 不能為空, 預設使用xpath
'selector_type' => 'xpath', // 抽取規則型別, 預設xpath, 可選 xpaht | jsonpath | regex
'required' => true, // 是否必須的, 預設false, 可選 true | false
'repeated' => false, // 抽取到的內容是否多項, 預設false, 可選 false | true(結果都是陣列型別)
'children' => array( // 為此field定義子項, 子項的定義仍然是一個fields陣列
array(
'name' => 'replay', // # 例如抽取新聞下面的評論
'selector' => "//div[contains(@class,'replay')]"
)
),
'source_type' => 'url_content', // 該field的資料來源, 預設從當前的網頁 (url_context) 中抽取資料, 可選 url_context | attached_url
// 'source_type' => 'attached_url',
// 'attached_url' => 'https://news.163.com/{comment_id}/comments', // 當source_type設定為attached_url時, 定義新請求的url
),
array(
'name' => "title",
'selector' => '//*[@id="epContentLeft"]/h1',
)
)
);
// 載入配置
$spider = new phpspider($configs);
// 啟動爬蟲
$spider->start();