使用网络爬虫/网络抓取工具 (PHP / cURL) 从网站获取 cookie
Getting cookies from a website with a Webcrawler / webscraper (PHP / cURL)
我正在寻找一种使用网络爬虫从网站获取 cookie 的方法。
我已经调查过这种情况,但我找不到合适的库/方法来解决我的问题。我不想从浏览器中获取 cookie,我正在尝试从网站(任何网站)获取它们。
希望有人能给我提供合适的解决方案/库!
提前致谢!
亲切的问候,
迈克
编辑:我知道关于这个爬虫库有一个类似的post。但是 post 已经过时了,它是从 2011 年开始的。
您可以使用 php-curl
获取 cookie,只需使用如下脚本:
<?php
// The url to visit
$url = "https://www.google.com";
// Where to read cookies from and where to write them
$cookiesFile = "cookies.txt";
// Setup
$handle = curl_init();
curl_setopt( $handle, CURLOPT_URL, $url );
curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, true );
// Send cookies upon request and update them as per response
curl_setopt( $handle, CURLOPT_COOKIEFILE, $cookiesFile );
curl_setopt( $handle, CURLOPT_COOKIEJAR, $cookiesFile );
// Send request, get response
$response = curl_exec( $handle );
// Done with curl
curl_close( $handle );
你在 cookies.txt
文件中得到的内容看起来像...
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
.google.com TRUE / FALSE 1547833930 1P_JAR 2018-12-19-17
#HttpOnly_.google.com TRUE / FALSE 1561053130 NID 150=OF8rpPblfIZCnga6aoN_Zo6_H9nv87Th7ggQZDijf76GJ11ZDkWXmQXEQ9cUOBC3z7vY_Ea0-NtGcK5wi8Qo3myU1nnNksfgTreuIHJRiI0-pEqN9v4H7YGafp6r0RFHFueUbJ9IWo3Bu83Sh3akVW6bXzY2I-rJvaIIGoW9Fdg
Cookie 以特定格式存储,称为 Netscape HTTP Cookie 文件,您可以查看 this question and related answers 了解更多详细信息。
当使用上述代码发出后续请求时,将从 cookie 文件中读取先前收到的 cookie 并随请求一起发送。如果更新了 cookie,当收到响应时,文件也会更新。
这很重要,因为当您访问同一网站的 php-curl
更多页面时,cookie 存储会保持一致。以会话 cookie 为例。
以上代码在 $response
中存储了所访问页面的 HTTP 代码。
请注意,如果您只需要访问几个页面并获取 cookie,那么只需使用开头显示的代码即可轻松完成。
它可以很容易地调整,甚至可以发出 POST 请求,以防您需要在用户编译表单并提交时发送数据。
如果您需要抓取整个网站,事情可能不是那么简单。
最后考虑到 cookie 可能由 JavaScript 代码设置。
如果您需要访问交互式/JavaScript-rich 站点并模拟用户交互然后检查 cookie php-curl
不适合这种情况。
您需要编写无头浏览器的脚本。
我正在寻找一种使用网络爬虫从网站获取 cookie 的方法。 我已经调查过这种情况,但我找不到合适的库/方法来解决我的问题。我不想从浏览器中获取 cookie,我正在尝试从网站(任何网站)获取它们。
希望有人能给我提供合适的解决方案/库! 提前致谢!
亲切的问候, 迈克
编辑:我知道关于这个爬虫库有一个类似的post。但是 post 已经过时了,它是从 2011 年开始的。
您可以使用 php-curl
获取 cookie,只需使用如下脚本:
<?php
// The url to visit
$url = "https://www.google.com";
// Where to read cookies from and where to write them
$cookiesFile = "cookies.txt";
// Setup
$handle = curl_init();
curl_setopt( $handle, CURLOPT_URL, $url );
curl_setopt( $handle, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $handle, CURLOPT_FOLLOWLOCATION, true );
// Send cookies upon request and update them as per response
curl_setopt( $handle, CURLOPT_COOKIEFILE, $cookiesFile );
curl_setopt( $handle, CURLOPT_COOKIEJAR, $cookiesFile );
// Send request, get response
$response = curl_exec( $handle );
// Done with curl
curl_close( $handle );
你在 cookies.txt
文件中得到的内容看起来像...
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
.google.com TRUE / FALSE 1547833930 1P_JAR 2018-12-19-17
#HttpOnly_.google.com TRUE / FALSE 1561053130 NID 150=OF8rpPblfIZCnga6aoN_Zo6_H9nv87Th7ggQZDijf76GJ11ZDkWXmQXEQ9cUOBC3z7vY_Ea0-NtGcK5wi8Qo3myU1nnNksfgTreuIHJRiI0-pEqN9v4H7YGafp6r0RFHFueUbJ9IWo3Bu83Sh3akVW6bXzY2I-rJvaIIGoW9Fdg
Cookie 以特定格式存储,称为 Netscape HTTP Cookie 文件,您可以查看 this question and related answers 了解更多详细信息。
当使用上述代码发出后续请求时,将从 cookie 文件中读取先前收到的 cookie 并随请求一起发送。如果更新了 cookie,当收到响应时,文件也会更新。
这很重要,因为当您访问同一网站的 php-curl
更多页面时,cookie 存储会保持一致。以会话 cookie 为例。
以上代码在 $response
中存储了所访问页面的 HTTP 代码。
请注意,如果您只需要访问几个页面并获取 cookie,那么只需使用开头显示的代码即可轻松完成。
它可以很容易地调整,甚至可以发出 POST 请求,以防您需要在用户编译表单并提交时发送数据。
如果您需要抓取整个网站,事情可能不是那么简单。
最后考虑到 cookie 可能由 JavaScript 代码设置。
如果您需要访问交互式/JavaScript-rich 站点并模拟用户交互然后检查 cookie php-curl
不适合这种情况。
您需要编写无头浏览器的脚本。