【问题标题】:Getting cookies from a website with a Webcrawler / webscraper (PHP / cURL) [closed]使用 Web Crawler / Web Scraper(PHP / cURL)从网站获取 cookie [关闭]
【发布时间】:2018-12-18 16:56:04
【问题描述】:

我正在寻找一种使用网络爬虫从网站获取 cookie 的方法。 我已经调查了这种情况,但我找不到合适的库/方法来解决我的问题。我不想从浏览器中获取 cookie,我正在尝试从网站(任何网站)获取它们。

我希望有人可以为我提供正确的解决方案/库! 提前谢谢!

亲切的问候, 迈克

编辑:我知道有一篇关于这个爬虫库的类似帖子。但是那个帖子已经过时了,它是从 2011 年开始的。

【问题讨论】:

  • 您只需解析 Set-Cookie 响应标头。工具/库的问题虽然是题外话。自己挑一个,遇到问题再回来。
  • 好的,谢谢@Peter!我会调查一下=)

标签: php cookies web-crawler php-curl


【解决方案1】:

您可以通过 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 Cookies 文件的特定格式存储,您可以查看this question and related answers 了解更多详细信息。


当使用上述代码发出后续请求时,先前收到的 cookie 将从 cookie 文件中读取并与请求一起发送。如果更新了 cookie,则当收到响应时,文件也会更新。

这很重要,因为当您使用php-curl 访问同一网站的更多页面时,cookie 存储会保持一致。以会话 cookie 为例。

以上代码在$response中存储了访问页面的HTTP代码。


请注意,如果您只需要访问几个页面并获取 cookie,这是一项简单的工作,只需在开头显示的代码即可完成。

它可以很容易地调整,甚至可以发出 POST 请求,以防您需要在用户编译表单并提交时发送数据。

如果您需要抓取整个网站,事情可能就不是那么简单了。

最后要考虑到 cookie 可能由 JavaScript 代码设置。

如果您需要访问一个交互式/富含 JavaScript 的站点并模拟用户交互然后检查 cookie,php-curl 不适合这样做。 您需要编写一个无头浏览器的脚本。

【讨论】:

  • 哇,谢谢,这就像一个魅力!而且,这个解释让我很清楚!为你干杯 =)
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多