很多次爬行時,我們遇到了使用Javascript生成頁面上呈現的內容的問題,因此scrapy無法抓取它(例如,ajax請求,jQuery)如何使用php Goutte和Guzzle抓取數據是否由Javascript加載?
2
A
回答
0
Guzzle(內部使用的Goutte)是一個HTTP客戶端。因此,javascript內容將不會被解析或執行。位於請求端點之外的Javascript文件將不會被下載。
根據您的環境,我想可以利用PHPv8(嵌入Google V8 javascript引擎的PHP擴展)和自定義handler/middleware來執行您想要的操作。
然後再次,根據您的環境,簡單地使用JavaScript客戶端執行刮取可能會更容易。
-1
因爲它是不可能的JavaScript來的工作,我可以建議另一種解決方案:
Google Chrome瀏覽器>右鍵按鈕>檢查元素>右鍵按鈕>編輯爲html>複製>工作與複製的HTML
$html = $the_copied_html;
$crawler = new Crawler($html);
$data = $crawler->filter('.your-selector')->each(function (Crawler $node, $i) {
return [
'text' => $node->text()
];
});
//Do whatever you want with the $data
return $data; //type Array
這隻適用於單個作業而不適用於自動化過程。在我的情況下,這將做到這一點。
2
你想看看phantomjs。有此PHP實現:
http://jonnnnyw.github.io/php-phantomjs/
,如果你需要把它與課程的PHP工作。
您可以閱讀頁面,然後將內容提供給Guzzle,以便使用Guzzle爲您提供的漂亮功能(如搜索內容等)。這將取決於你的需求,也許你可以簡單地使用DOM,就像這樣:
How to get element by class name?
下面是一些工作的代碼。
$content = $this->getHeadlessReponse($url);
$this->crawler->addContent($this->getHeadlessReponse($url));
/**
* Get response using a headless browser (phantom in this case).
*
* @param $url
* URL to fetch headless
*
* @return string
* Response.
*/
public function getHeadlessReponse($url) {
// Fetch with phamtomjs
$phantomClient = PhantomClient::getInstance();
// and feed into the crawler.
$request = $phantomClient->getMessageFactory()->createRequest($url, 'GET');
/**
* @see JonnyW\PhantomJs\Http\Response
**/
$response = $phantomClient->getMessageFactory()->createResponse();
// Send the request
$phantomClient->send($request, $response);
if($response->getStatus() === 200) {
// Dump the requested page content
return $response->getContent();
}
}
只有使用虛擬的缺點,它會比狂飲慢,但當然,你必須等待加載所有那些討厭的JS。
相關問題
- 1. 用Goutte/Guzzle登錄後下載文件
- 2. 如何使用Guzzle,Goutte和Symfony 3來處理多重定向?
- 3. 如何更改goutte的guzzle屬性?
- 4. GOUTTE提取數據
- 5. php從javascript抓取數據
- 6. 如何使用PHP GOUTTE
- 7. 用cURL抓取數據(JavaScript,PHP,jQuery)
- 8. 從DSTK(數據科學工具包)獲取來自Guzzle/Goutte的響應
- 9. 抓住URL是否加載
- 10. 如何使用PHP抓取URL參數?
- 11. PHP - 數據抓取
- 12. 如何使用GOUTTE
- 13. 如何使用Goutte
- 14. 由ajax加載的抓取內容
- 15. googlebot抓取由ajax加載的內容?
- 16. 如何查看由使用solr的nutch抓取的數據?
- 17. PHP - 不能使用抓取的數據
- 18. 抓取數據,並結合使用PHP
- 19. 如何使用linkedin和guzzle?
- 20. 使用Guzzle獲取遠程數據
- 21. 如何使用OAuth抓取Twitter數據
- 22. 限制使用Guzzle/Goutte時的請求大小
- 23. 使用PHP和JavaScript讀取blob數據
- 24. 如何使用R從JavaScript餅圖中抓取Web數據?
- 25. 如何使用Guzzle PHP獲得SENT數據的主體?
- 26. php抓取 - 啓用javascript
- 27. 加載數據 - 使用Javascript
- 28. 是否有可能使用javascript加載數據表格
- 29. 如何檢查是否使用Javascript(js文件)已經加載或使用PHP
- 30. 使用Scrapy抓取數據以加載更多內容?
檢查'$ response-> getStatus()'是否也等於301以防重定向。 – thisiskelvin