我正在实施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;
请帮助我,我正在为此工作几个小时,什么都没有。
答案 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计算机。