PHP Goutte/CURL-完整的ASPX表单
我试图从这里获取数据: 我正在检查商业名称是否免费。 但是这个网站是asp.net的网页形式,整个网站是一个大的形式。 我不知道如何从这个表格中获取数据 我认为问题在于:PHP Goutte/CURL-完整的ASPX表单,php,asp.net,curl,web-scraping,goutte,Php,Asp.net,Curl,Web Scraping,Goutte,我试图从这里获取数据: 我正在检查商业名称是否免费。 但是这个网站是asp.net的网页形式,整个网站是一个大的形式。 我不知道如何从这个表格中获取数据 我认为问题在于: '__VIEWSTATE' => '', '__VIEWSTATEGENERATOR' => '9E6EC73D', '__EVENTVALIDATION' => '', 是否可以在PHP中发送请求并获取返回的数据? 因为,这个代码正在返回 当前节点列表为空
'__VIEWSTATE' => '',
'__VIEWSTATEGENERATOR' => '9E6EC73D',
'__EVENTVALIDATION' => '',
是否可以在PHP中发送请求并获取返回的数据?
因为,这个代码正在返回
当前节点列表为空
多谢各位
我的代码:
$crawler = $client->request('GET', 'https://wyobiz.wy.gov/Business/FilingSearch.aspx');
$form = $crawler->selectButton('Search')->form();
$formValues = $form->getValues();
$crawler = $client->submit($form, array(
'__VIEWSTATE' => $formValues['__VIEWSTATE'],
'__VIEWSTATEGENERATOR' => $formValues['__VIEWSTATEGENERATOR'],
'__EVENTVALIDATION' => $formValues['__EVENTVALIDATION'],
'ctl00$MainContent$myScriptManager' => 'MainContent_myScriptManager',
'ctl00$MainContent$txtFilingName' => 'Google',
'ctl00$MainContent$searchOpt' => 'chkSearchStartWith',
'ctl00$MainContent$txtFilingID' => null,
));
$crawler->filter('body')->each(function ($node) {
print $node->text() . "\n";
});
结论:痛风吸吮痛风的支持吸吮 嗯,我对goutte不太熟悉,但使用这个软件包,我制作了一个快速的示例来删除该链接的内容: 使用以下方式安装:
composer require w3zone/Crawler
然后将其用于您的案例,如下所示:
require_once __DIR__ . '/vendor/autoload.php';
use w3zone\Crawler\{Crawler, Services\phpCurl};
$crawler = new Crawler(new phpCurl);
$link = 'https://wyobiz.wy.gov/Business/FilingSearch.aspx';
$homePage = $crawler->get($link)->run();
preg_match('#<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)"\s*/>#', $homePage['body'], $viewState);
preg_match('#<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="(.*?)"\s*/>#', $homePage['body'], $viewGen);
preg_match('#<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)"\s*/>#', $homePage['body' ], $eventVal);
$postData = array(
'__VIEWSTATE' => $viewState[1],
'__LASTFOCUS' => '',
'__EVENTTARGET' => '',
'__EVENTARGUMENT' => '',
'__VIEWSTATEGENERATOR' => $viewGen[1],
'__EVENTVALIDATION' => $eventVal[1],
'ctl00$MainContent$myScriptManager' => 'MainContent_myScriptManager',
'ctl00$MainContent$txtFilingName' => 'test',
'ctl00$MainContent$searchOpt' => 'chkSearchStartWith',
'ctl00$MainContent$txtFilingID' => '',
'ctl00$MainContent$cmdSearch' => 'Search',
'__ASYNCPOST' => 'true',
'ctl00$MainContent$myScriptManager' => 'ctl00$MainContent$UpdatePanel1|ctl00$MainContent$cmdSearch',
);
$response = $crawler->post(['url' => $link, 'data' => $postData])->dumpHeaders()->run();
echo "<textarea style='width: 90%; height: 200px;'>".$response['body']."</textarea>";
require\u once\uuuuu DIR\uuuuuuu.'/供应商/autoload.php';
使用w3zone\Crawler\{Crawler,Services\phpCurl};
$crawler=新的爬虫程序(新的phpCurl);
$link='1https://wyobiz.wy.gov/Business/FilingSearch.aspx';
$homePage=$crawler->get($link)->run();
preg#u match(“##,$homePage['body]”,$viewState);
preg#u match(“##,$homePage['body]”,$viewGen);
preg#u match(“##,$homePage['body]”,$eventVal);
$postData=数组(
“\uu VIEWSTATE”=>$VIEWSTATE[1],
“\uu LASTFOCUS”=>”,
“\u EVENTTARGET”=>”,
“\uu EVENTARGUMENT”=>”,
“\uu VIEWSTATEGENERATOR”=>$viewGen[1],
“\uu EVENTVALIDATION”=>$eventVal[1],
“ctl00$MainContent$myScriptManager'=>“MainContent\u myScriptManager”,
'ctl00$MainContent$txtFilingName'=>'test',
'ctl00$MainContent$searchOpt'=>'chkSearchStartWith',
“ctl00$MainContent$txtFilingID'=>”,
“ctl00$MainContent$cmdSearch'=>“Search”,
“\uu ASYNCPOST”=>“true”,
“ctl00$MainContent$myScriptManager'=>“ctl00$MainContent$UpdatePanel1 | ctl00$MainContent$cmdSearch”,
);
$response=$crawler->post(['url'=>$link,'data'=>$postData])->dumpHeaders()->run();
回显“$response['body']”;
好吧,我对goutte不太熟悉,但使用这个软件包,我制作了一个快速的示例来删除该链接的内容:
使用以下方式安装:
composer require w3zone/Crawler
然后将其用于您的案例,如下所示:
require_once __DIR__ . '/vendor/autoload.php';
use w3zone\Crawler\{Crawler, Services\phpCurl};
$crawler = new Crawler(new phpCurl);
$link = 'https://wyobiz.wy.gov/Business/FilingSearch.aspx';
$homePage = $crawler->get($link)->run();
preg_match('#<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)"\s*/>#', $homePage['body'], $viewState);
preg_match('#<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="(.*?)"\s*/>#', $homePage['body'], $viewGen);
preg_match('#<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)"\s*/>#', $homePage['body' ], $eventVal);
$postData = array(
'__VIEWSTATE' => $viewState[1],
'__LASTFOCUS' => '',
'__EVENTTARGET' => '',
'__EVENTARGUMENT' => '',
'__VIEWSTATEGENERATOR' => $viewGen[1],
'__EVENTVALIDATION' => $eventVal[1],
'ctl00$MainContent$myScriptManager' => 'MainContent_myScriptManager',
'ctl00$MainContent$txtFilingName' => 'test',
'ctl00$MainContent$searchOpt' => 'chkSearchStartWith',
'ctl00$MainContent$txtFilingID' => '',
'ctl00$MainContent$cmdSearch' => 'Search',
'__ASYNCPOST' => 'true',
'ctl00$MainContent$myScriptManager' => 'ctl00$MainContent$UpdatePanel1|ctl00$MainContent$cmdSearch',
);
$response = $crawler->post(['url' => $link, 'data' => $postData])->dumpHeaders()->run();
echo "<textarea style='width: 90%; height: 200px;'>".$response['body']."</textarea>";
require\u once\uuuuu DIR\uuuuuuu.'/供应商/autoload.php';
使用w3zone\Crawler\{Crawler,Services\phpCurl};
$crawler=新的爬虫程序(新的phpCurl);
$link='1https://wyobiz.wy.gov/Business/FilingSearch.aspx';
$homePage=$crawler->get($link)->run();
preg#u match(“##,$homePage['body]”,$viewState);
preg#u match(“##,$homePage['body]”,$viewGen);
preg#u match(“##,$homePage['body]”,$eventVal);
$postData=数组(
“\uu VIEWSTATE”=>$VIEWSTATE[1],
“\uu LASTFOCUS”=>”,
“\u EVENTTARGET”=>”,
“\uu EVENTARGUMENT”=>”,
“\uu VIEWSTATEGENERATOR”=>$viewGen[1],
“\uu EVENTVALIDATION”=>$eventVal[1],
“ctl00$MainContent$myScriptManager'=>“MainContent\u myScriptManager”,
'ctl00$MainContent$txtFilingName'=>'test',
'ctl00$MainContent$searchOpt'=>'chkSearchStartWith',
“ctl00$MainContent$txtFilingID'=>”,
“ctl00$MainContent$cmdSearch'=>“Search”,
“\uu ASYNCPOST”=>“true”,
“ctl00$MainContent$myScriptManager'=>“ctl00$MainContent$UpdatePanel1 | ctl00$MainContent$cmdSearch”,
);
$response=$crawler->post(['url'=>$link,'data'=>$postData])->dumpHeaders()->run();
回显“$response['body']”;
我的问题是ASP异步响应不是HTML,而是包含HTML的文本:
<html>
1|#||4|6079|updatePanel|ctl00_MainContentPlaceHolder_ucLicenseLookup_UpdtPanelGridLookup|
<div class="modal-window-lookup-results fade bs-example-modal-lg in">
<div class="modal-header">
[...]
</html>
1 |#| | | | 4 | 6079 |更新面板| ctl00 |主内容占位符| ucLicenseLookup | UpdtPanelGridLookup ||
[...]
所以,当goutte将其输入浏览器工具包时,它会断开。痛风不吸-
你不能给它提供非HTML垃圾
为了尽快解决这个问题,我做了:
$crawler = $client->request('POST', $url, $params);
// this is a broken crawler because response is not html!
$html = $client->getResponse()->getContent();
$html = substr($html, strpos($html, "<div"));
$html = substr($html, 0, strpos($html, "|hiddenField|")-3);
$html = "<!DOCTYPE html><html>$html</html>";
$crawler = new \Symfony\Component\DomCrawler\Crawler($html);
print $crawler->html();
$crawler=$client->request('POST',$url,$params);
//这是一个坏的爬虫,因为响应不是html!
$html=$client->getResponse()->getContent();
$html=substr($html,strpos($html,”我的问题是ASP异步响应不是html,而是包含html的文本:
<html>
1|#||4|6079|updatePanel|ctl00_MainContentPlaceHolder_ucLicenseLookup_UpdtPanelGridLookup|
<div class="modal-window-lookup-results fade bs-example-modal-lg in">
<div class="modal-header">
[...]
</html>
1 |#| | | | 4 | 6079 |更新面板| ctl00 |主内容占位符| ucLicenseLookup | UpdtPanelGridLookup ||
[...]
所以,当goutte将其输入浏览器工具包时,它会断开。goutte不会吮吸-
你不能给它提供非HTML垃圾
为了尽快解决这个问题,我做了:
$crawler = $client->request('POST', $url, $params);
// this is a broken crawler because response is not html!
$html = $client->getResponse()->getContent();
$html = substr($html, strpos($html, "<div"));
$html = substr($html, 0, strpos($html, "|hiddenField|")-3);
$html = "<!DOCTYPE html><html>$html</html>";
$crawler = new \Symfony\Component\DomCrawler\Crawler($html);
print $crawler->html();
$crawler=$client->request('POST',$url,$params);
//这是一个坏的爬虫,因为响应不是html!
$html=$client->getResponse()->getContent();
$html=substr($html,strpos($html),“我开始认为,这是不可能的…$formValues[''uu\u VIEWSTATE']
这个变量的输出是什么?它是否为空?@hassan不,它不是空的。它返回了很长的字符串。我不明白为什么它不工作。\uuu VIEWSTATE、\uu VIEWSTATEGENERATOR、\uu EVENTVALIDATION设置正确……我认为您发送的参数中存在问题;您没有发送所需的完整参数。我正在开始想一想,这是不可能的…$formValues['''uu\u VIEWSTATE']
这个变量的输出是什么?它是否为空?@hassan不,它不是空的。它返回了很长的字符串。我不明白为什么它不工作。\uuu VIEWSTATE、\uu VIEWSTATEGENERATOR、\uu EVENTVALIDATION设置正确……我认为您发送的参数中存在问题;您没有发送所需的完整参数Hanks,有吗你尝试过这个?如果你删除u LASTFOCUS、u EVENTTARGET、u EVENTARGUMENT会发生什么?不,你可以尝试,但因为它们包含空值,如果你包含它们就可以了;这解决了你的问题吗?嘿,不,我被告知,这个网站对机器人搜索或其他东西有一些保护。我正在尝试获取更多信息。顺便说一句,你可以吗请尝试一下?可能是我的项目出了问题。谢谢,你尝试过了吗?如果你删除了uu LASTFOCUS、u EVENTTARGET、u EVENTARGUMENT会怎么样?不,你可以尝试,但是因为它们包含空值,如果你包含它们就可以了;这解决了你的问题吗?嘿,不,我被告知,t