Подскажите, что именно стоит изучать, на что акцентировать внимание, какие библиотеки использовать, чтобы создать желательно быстрый парсер маркетплейсов на PHP?
Посоветуйте,какой стек использовать, что почитать и изучить, чтобы реализовать следующий функционал:
можно ли будет использовать парсер от Python на PHP сайте?
proxies = {
"http": f'socks{socks_type}://{host}:{port}',
"https": f'socks{socks_type}://{host}:{port}'
}
Как спарсить подобный сайт?Подобный чему?
Сайт может блокировать аккаунты на несколько часов, что и происходит примерно через 30 минут парсинга.Что за операции, что вам не хватает 30 минут?
Сначала пробовал работать через api сайта.Демонстрируйте код.
Логинился в селениуме, получал заголовки и делал запросы на нужную мне информациюТак через api или селениум, вы определитесь.
Можно ли попытаться выдать селениум хром за сафари на iPhone, и есть ли вообще в этом смысл?Вы сами пишите что парсинг возможен только из под аккаунта и блочится аккаунт. Очевидно сайту все равно сколько устройств вы имитируете, если аккаунт один и тот же.
$tries
, а вместо исключения вызывать $this->release()
class MyQueueJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
const TIMEOUT = 10;
public $tries= 288;
public $url;
public $data;
public function __construct(string $url, $data)
{
$this->onQueue('myqueue');
$this->url = $url;
$this->data = $data;
}
public function handle()
{
try {
$response = Http::withOptions(['verify' => false])
->timeout(self::TIMEOUT)
->post($this->url, [$this->data]);
} catch (\Exception $exception) {
$this->release(300);
}
if (isset($response) && $response->failed()) {
$this->release(300);
}
}
}
command=php /laravel/artisan queue:work --queue=myqueue
print "Hello world"
<?php
$python = shell_exec('C:\Python27\python.exe e:\xampp\htdocs\scripts\test.py');
echo "Python is printing: " . $python;
?>
requests
и используем urllib.request
import json
import urllib.request
headers = {
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_4) AppleWebKit/605.1.15 '
'(KHTML, like Gecko) Version/14.1.1 Safari/605.1.15',
'Origin': 'https://yandex.ru',
'Referer': 'https://yandex.ru/',
}
API_URL = 'https://zeapi.yandex.net/lab/api/yalm/text3'
payload = {"query": "Ура Хабр", "intro": 0, "filter": 1}
params = json.dumps(payload).encode('utf8')
req = urllib.request.Request(API_URL, data=params, headers=headers)
response = urllib.request.urlopen(req)
print(response.read().decode('utf8'))
Распараллелить выполнение в самом воркере с помощью ReactPHP или лучше GuzzleAsync. В таком случае не придется держать 5000 воркеров именно
2. "Правильно ли" это вообще делать с помощью PHP или это все таки задача уже других языков которые умеют в параллельное выполнение, корутины? Go, NodeJs?
3. Может уже есть готовые решения в виде библиотек на PHP? Искал, но не нашел
<?php
// Файл /test/tester.php
<?php
@unlink("/test/document.txt");
$processTime = 0.0001;
for ($i = 1; $i <= 15; $i++) {
$processTime *= 2;
$time = $i === 1 ? 0 : $processTime;
if ($i === 2) {
sleep(2);
}
usleep($time * 1000000);
passthru("php /test/subject.php $i $time >> /test/log_file.log 2>&1 &");
}
<?php
// Файл /test/subject.php
$processId = $argv[1];
$processTime = $argv[2];
$fp = fopen(__DIR__ . "/document.txt", "a+");
flock($fp, LOCK_EX);
if($processId == 1) {
sleep(15);
$processTime = 15;
}
fwrite($fp, $processId . ': ' . $processTime . ' sec.' . "\n");
echo $processId . "\n";
flock($fp, LOCK_UN);
fclose($fp);
1: 15 sec.
3: 0.0008 sec.
15: 3.2768 sec.
5: 0.0032 sec.
4: 0.0016 sec.
12: 0.4096 sec.
10: 0.1024 sec.
7: 0.0128 sec.
6: 0.0064 sec.
8: 0.0256 sec.
11: 0.2048 sec.
13: 0.8192 sec.
9: 0.0512 sec.
14: 1.6384 sec.
2: 0.0004 sec.
1
3
15
5
4
12
10
7
6
8
11
13
9
14
2
set_exception_handler(function ($e)
{
error_log($e);
http_response_code(500);
if (ini_get('display_errors')) {
echo $e;
} else {
include 'pages/error_500.php';
}
});