PHP scrapy cURL请求不起作用

时间:2017-05-18 12:08:24

标签: php ajax curl post

我正在实施scrapy蜘蛛来抓取包含房地产优惠的网站。该网站包含一个房地产经纪人的电话号码,可以通过ajax邮件请求进行检索。

要获取电话号码,我必须从URL获取ID,然后从源csrfToken获取并使用带有ID的特殊URL通过POST发送。这种方法运作良好,但从昨天起不起作用。

我的代码:

    $urlSite = "https://www.otodom.pl/mazowieckie/oferta/piekne-mieszkanie-na-mokotowie-do-wynajecia-ID3ezHA.html";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($ch, CURLOPT_URL, $urlSite);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);

    curl_close($ch);

    preg_match("/csrfToken = '(.+?)'/", $result, $output_array);
    preg_match("/ID(.+?).html/", $urlSite, $output_array_id);

    $token = $output_array[1];
    $id = $output_array_id[1];

    $url = "https://www.otodom.pl/ajax/mazowieckie/misc/contact/phone/" . $id . "/";

    $headers = [
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Encoding: gzip, deflate, br',
        'Accept-Language: pl,en-US;q=0.8,en;q=0.6,ru;q=0.4',
        'Cache-Control: no-cache',
        'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
        'Content-Length: 74',
        'Host: www.otodom.pl',
        'Referer: ' . $urlSite,
        'User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36'
    ];

    $data = array(
        'CSRFToken' => $token
        );

    $data_string = http_build_query($data);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $phone = utf8_decode(curl_exec($ch));

    curl_close($ch);

    echo $phone;

请帮助我,我正在为此工作几个小时,什么都没有。

1 个答案:

答案 0 :(得分:0)

  

{“status”:“error”,“message”:“Spróbujwykonaćoperacjęponownie.Jeśli   niepomoże,sprawdźczymaszwłączonąobsługęJavaScriptw   przeglądarce。“}

正如我在评论中提到的,您需要JavaScript才能获得电话号码。实现此目的的一种方法是使用selenium,这是一个python示例:

import time
from selenium import webdriver
geckodriver = 'C:/path_to/geckodriver.exe'
driver = webdriver.Firefox(executable_path = geckodriver)
driver.get("https://www.otodom.pl/mazowieckie/oferta/piekne-mieszkanie-na-mokotowie-do-wynajecia-ID3ezHA.html")
driver.find_element_by_class_name("phone-spoiler").click()
time.sleep(2)
print driver.find_element_by_class_name("phone-number").text
# 515 174 616

备注:

1 - 安装Selenium:

pip install selenium

2 - 下载geckodriver
3 - 将C:/path_to替换为您保存path的{​​{1}} 4 - 将geckodriver.exe添加到您的环境中 5 - 重新启动系统。
6 - 运行C:/path_to,将显示电话号码。

以上步骤假设您使用的是Windows计算机