【发布时间】:2018-06-15 16:50:17
【问题描述】:
尊敬的 StackOverflow 社区,
我的任务是创建一个脚本,通过在 PHP 中使用 cURL 获取 Craigslist 广告并将它们发布到另一个页面上。
我想这样做的方式:
- 在包含广告“https://amsterdam.craigslist.org/d/flats-housing-for-rent/search/apa?lang=en&cc=gb”的网页上运行一次 cURL
- 提取每个广告的链接并将其存储在一个数组中(例如 $listings['links'])
- 然后在数组中的每个链接上运行另一个 cURL 并提取广告的所有元素并将它们放在 $listings = array() 中,如下所示 $listings['title'], $listings['price' ], $listings['description']
- 最后我必须显示用 cURL 报废的信息,但这我可以自己管理
我唯一的问题是,如何在第一个 cURL 的结果上运行 cURL? 我想在 $listings['links'] 上运行一个 foreach 循环并从那里删除信息。
下面是我写的代码,它只废弃了 $listings['links'],因此 foreach 循环中的第二个 cURL 不起作用。
您能否建议我应该如何继续让它工作?
感谢您的支持!
$url = "https://amsterdam.craigslist.org/d/flats-housing-for-rent/search/apa?lang=en&cc=gb";
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, $url);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch1);
$listings = array();
//Match listing link
preg_match_all(
"!<a href=\"https:\/\/amsterdam\.craigslist\.org\/apa\/d\/.*\/.*\.html\?lang=en&cc=gb\" class=\"result-image gallery\" data-ids=\".*\">
<span class=\"result-price\">.*<\/span>
<\/a>!", $result, $match);
$listings['link'] = $match[0];
foreach($listings['link'] as $link){
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $link);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, false);
$result_meta = curl_exec($ch2);
$meta = array();
preg_match_all("!<title>(.*)</title>!", $result_meta, $match);
$listings['title'] = $match[0];
}
// Return results
echo "<pre>";
print_r($listings['title']); // no title is stored in this array :(
die;
echo "</pre>";
【问题讨论】:
-
第二个 curl 不起作用是什么意思?空的
$listings['title']仅证明preg_math_all()中使用的正则表达式可能存在问题。result_meta是空的吗?初始的$listings['link']是空的吗?你的问题连最基本的调试逻辑都没有。
标签: php curl web-scraping