【问题标题】:What tool for scraping in LaravelLaravel 用什么工具来抓取
【发布时间】:2020-07-12 09:33:47
【问题描述】:
我想在 Laravel 7 中建立一个需要在其他站点中抓取的网站。我必须填写表格并单击。我看到使用 python 是可能的。刮擦将每小时进行一次。我也看到了 Laravel 黄昏,但它在生产环境中不起作用。您建议我使用什么技术?我不知道python,所以我会学习它是否更适应。
谢谢
【问题讨论】:
标签:
python
php
laravel
screen-scraping
【解决方案1】:
有很多选择取决于你想做什么。
如果您使用的网站不是 SPA,那么您可以简单地使用 PHP 附带的 DOM 包,您可以使用 curl 获取页面 HTML 并使用 PHP DOM 解析它包。
但是,如果您想浏览网站并浏览某个场景,那么您最好使用 Laravel Dusk、Puphpteer、Selenium 之类的内容。
过去我曾使用过Puphpteer,效果很好,这是一个示例
$puppeteer = new Puppeteer();
$browser = $puppeteer->launch([
'headless' => true,
'args' => [
'--no-sandbox',
'--disable-setuid-sandbox'
]
]);
$page = $browser->newPage();
$page->goto('https://facebook.com');
$page->type('#username', 'email');
$page->type('#pass', 'password');
$page->click('button.btn__primary--large.from__button--floating');
此脚本在无头浏览器中打开 facebook.com,并使用 email 和 password 填充字段,然后单击带有 button.btn__primary--large.from__button--floating 的 css 选择器的按钮
【解决方案2】:
填写表格并点击
这意味着你必须做一些琐碎的 POST 请求。
PHP curl 擅长:
$curl = curl_init('http://testing-ground.webscraping.pro/textlist');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, ['a' => 'abc']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$page = curl_exec($curl);
if(curl_errno($curl)) // check for execution errors
{
echo 'Scraper error: ' . curl_error($curl);
exit;
}
curl_close($curl);
更多详情请查看here。