1

我正在编写一个爬网脚本来读取网上商店的评级。

curl 部分现在给我带来了麻烦,因为它没有检索到正确的内容。

我使用 ajax 脚本从数据库中分批选择 url。我为 curl 提供了带有评分的页面的正确 url,但 Curl 正在检索没有 url 中可变部分的页面。

这是我传递给 Curl 的 url:$actualurl

http://www.domain.com/epages/xxx.sf/de_DE/?ObjectPath=/Shops/15456062/Products/%22Briefkastenst%C3%A4nder%20Bobiround%22/SubProducts/%22Briefkastenst%C3%A4nder%20Bobiround% 20gr%C3%BCn%20RAL6005%22&ViewAction=ViewProductRating

(这是我想从中读取所有 6 个评级 (Produktbewertungen) 的页面。)

但是通过 curl 调用,我从这个页面获取内容,这与没有 viewAction 的情况相同,我回显了输出

http://www.domain.com/epages/xxx.sf/de_DE/?ObjectPath=/Shops/15456062/Products/%22Briefkastenst%C3%A4nder%20Bobiround%22/SubProducts/%22Briefkastenst%C3%A4nder%20Bobiround% 20gr%C3%BCn%20RAL6005%22

我的 Curl 调用如下所示:

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_TIMEOUT, 30);
            curl_setopt($ch, CURLOPT_USERAGENT, $agent);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
            curl_setopt($ch, CURLOPT_URL, $actualurl);              
            //read content of $url
            $result = curl_exec ($ch);
            curl_close ($ch);

为什么 Curl 会忽略 url 的最后一部分(带有&ViewAction=ViewProductRating

非常感谢,我还是 curl 的新手!

编辑

我从 4 个部分构建了上面提到的 url。零件如下:

$domainroot: http://www.domain.com/
$objectpath: epages/xxx.sf/de_DE/?ObjectPath
$ratingurl: %3D%2FShops%2F15456062%2FProducts%2F%2522Briefkastenst%25C3%25A4nder%2520Bobiround%2522%2FSubProducts%2F%2522Briefkastenst%25C3%25A4nder%2520Bobiround%2520gr%25C3%25BCn%2520RAL6005%2522%26amp%3B
$viewratings: ViewAction=ViewProductRating

最后我将它们链接在一起:

$actualurl = $domainroot.$objectpath.$ratingurl.$viewratings;
4

2 回答 2

1

查询字符串的第一个参数应正确编码:

$queryString = 'ObjectPath=%2FShops%2F15456062%2FProducts%2F%22Briefkastenst' .     
'%C3%A4nder+Bobiround%22%2FSubProducts%2F%22Briefkastenst' . 
'%C3%A4nder+Bobiround+gr%C3%BCn+RAL6005' 
'&ViewAction=ViewProductRating';
于 2013-04-10T06:52:10.377 回答
0

非常感谢你的帮助!你让我今天一整天都感觉很好!

并感谢任何试图提供帮助的人!

确实是 & 角色搞砸了。不知何故,当在数据库中输入 url 时,脚本有 & to &,必须改回来

$ratingurl = str_replace('&','&',$ratingurl);

该 url 最初是使用 preg_match_all 获取的,并直接输入到数据库中

于 2013-04-11T09:04:43.680 回答