【解決済み】ヨドバシとかZOZOのサイトにどうやってもスクリプトからアクセス出来ない

カテゴリー:Perl・Javascript・python、サーバー管理メモ(記事数:83)



↑B


2021.10.12

【解決済み】ヨドバシとかZOZOのサイトにどうやってもスクリプトからアクセス出来ない

https://www.yodobashi.com/product/100000001002798135/
https://zozo.jp/shop/xti/goods-sale/28300279/

上記は一例なんですが、perlのHTTP::Requestどころか、wgetでもアクセス出来ないん。もちろんWebブラウザではアクセス可能。どんな必要要件があるんですかね?教えて偉い人!!!!

例えばPerlだと

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
my $can_accept = HTTP::Message::decodable;
my $response = $ua->get('http://xxxxxx', 'Accept-Encoding' => $can_accept,);
if ($response->is_success) {
print $response->decoded_content;
}else{
print $response->status_line;
}

でアクセスするとタイムアウトしちゃう。

タイムアウト設定しないとデフォルトのタイムアウト(180秒)まで戻ってこない。
wgetだと永遠にレスポンスが返ってこない。

別にスクレイピングしようとかってわけじゃないんですが、このサイトはURLは自動でリンク先からサムネイル画像とってきてリンク生成する機能があるんで、URL書くとリンク生成する段階で固まっちゃうんだよ。困った。。。

追記
両方アクセス出来ました。みんなありがとー。ヘッダーを下記のように挿入したらアクセス出来ました。
my $can_accept = HTTP::Message::decodable;
my $response = $ua->get('https://xxxxxx',
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36',
'Accept-Language' => 'ja,en-us;q=0.7,en;q=0.3',
'Accept-Encoding' => $can_accept,
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9');

しかし上記のヘッダーのうちどれがマストか検証してないけど少なくともこのUser-Agentが必須だった。これは今使っているChromeが出力しているもの。

または下記のように挿入。
$ua->default_header('User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36','Accept-Language' => 'ja,en-us;q=0.7,en;q=0.3','Accept-Encoding' => $can_accept,'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9');

と指定も可能。

下記はもともとのスクリプトで設定されていたUser-Agent。
Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1

これだとはじかれる念の入れよう。ボット対策かねぇ・・・・

PerlでWebページにアクセスする方法の俺的最新版は↓

Category:Perl・Javascript・python、サーバー管理メモ

 Keyword:Apple/181



コメント

いいっすね!=5
001 [10.12 17:11]どん:これでとれた。ブラウザは置き換えて。curl 'https://www.yodobashi.com/product/100000....' -H 'User-Agent: (ブラウザ)' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' --compressed -H 'DNT: 1' -H 'Connection: keep-alive'
002 [10.12 17:33]ちかぱか@Dion:User-Agent や Accept など、向こう側で必要なHTTPヘッダを受信するまで待ち受けているということですかね。
003 [10.12 18:19]サイト側もボットはなるべく弾きたい:似たような件で悩んでる人いましたね。https://teratail.com/questions/248027サーバーサイドじゃなくて、クライアントサイドで処理する(ページを閲覧しているブラウザ側でサムネイルなどを生成する)方が相手は嬉しいですよね。 (1)
004 [10.12 21:38]どん@OCN:多分ですが、リクエストを破棄してると思います。なのでタイムアウトまで待ってしまうんだと思います。 (1)
005 [10.12 22:21]yodobashiは>>001の人のでwgetとopenssl手打ちでも行けました@OCN:don't trackは不要でcompressionもいらないけどAccept-Encodingが無いと弾かれるみたいです。 (1)
006 [10.12 22:25]zozoの方はAccept-Languageが要るみたい@OCN:あとはyodobashiと同じで大丈夫そうです。 (1)
007 [10.12 23:14]ふぇちゅいん(管理人) TW★81:アクセスありがとー。上記に追記しましたがUser-Agentも厳密に見てるっぽい。 (1)
008 [10.12 23:15]ふぇちゅいん(管理人) TW★81:アクセス出来ましたありがとー。の打ち間違い。

名前 ↑B

コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数:


→カテゴリー:Perl・Javascript・python、サーバー管理メモ(記事数:83)
アクセス数の多い記事(過去1ヶ月)

すべて見る

Apple