動的コンテンツをスクレイピングするための無料プロキシワークフロー

動的コンテンツをスクレイピングするための無料プロキシワークフロー

迷宮を抜け出す:動的コンテンツスクレイピングのための無料プロキシワークフロー

動的コンテンツスクレイピングを理解する

現代のウェブページを動かす気まぐれな力である動的コンテンツは、単純なHTTPリクエストでは理解できません。JavaScriptでレンダリングされるため、単純なGETリクエスト以上の処理が要求されます。正規のブラウザを装ったリクエスト、IPアドレス制限をすり抜けるプロキシ、そして行間を読むコードなど、オーケストレーションが必要になります。

動的スクレイピングにおけるプロキシの役割

プロキシはデジタル仮面劇のマスクであり、以下の点で不可欠です。

  • IPベースのレート制限の回避
  • 地理的制限の回避
  • 検出を回避するためにトラフィックを分散する

しかし、金庫に手を付けずにこの匿名性を確保するにはどうすればいいのだろうか?無料のプロキシ――はかなく、手に負えない、しかし不可欠な存在だ。その利用法を、外科手術のような精密さで分析してみよう。


ワークフロー 1: Requests と BeautifulSoup を使用した無料パブリックプロキシのローテーション

材料

手順

  1. 収穫プロキシ
    無料のプロキシのリストをスクレイピングします。例: 無料プロキシリスト.

「`python
輸入リクエスト
bs4からBeautifulSoupをインポート

get_proxies() を定義します:
url = 'https://free-proxy-list.net/'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
プロキシ = set()
soup.find('table', id='proxylisttable').tbody.find_all('tr') 内の行を検索します。
row.find_all('td')[6].text == 'yes'の場合: # HTTPSプロキシのみ
ip = row.find_all('td')[0].text
ポート = row.find_all('td')[1].text
プロキシ.add(f'{ip}:{port}')
リストを返す(プロキシ)
“`

  1. リクエストのプロキシをローテーションする

「`python
ランダムにインポート

プロキシ = get_proxies()

def fetch_with_proxy(url):
proxy = random.choice(プロキシ)
試す:
resp = リクエスト.get(url, プロキシ={“http”: f”http://{proxy}”, “https”: f”http://{proxy}”}, タイムアウト=5)
resp.status_code == 200の場合:
対応するテキストを返す
例外を除く:
合格
なしを返す
“`

  1. 動的コンテンツの処理
    JS が最小限のページの場合は、ネットワーク トラフィックを検査して XHR エンドポイントを見つけ、データを直接取得します。

利点と欠点

特徴 長所 短所
設定 早くて簡単 プロキシは信頼できないことが多い
匿名 IPローテーションにより禁止が減少 頻繁にデッド/遅いプロキシ
動的コンテンツ シンプルなJSレンダリングサイトにのみ機能します 完全なJSサイトにはブラウザエミュが必要です

ワークフロー 2: Selenium と Free Proxy Rotation によるスクレイピング

材料

手順

  1. プロキシリストを取得する

上記と同様の論理だが、ターゲットを絞る sslproxies.org.

  1. プロキシを使用するようにSeleniumを構成する

「`python
セレンからWebDriverをインポート
selenium.webdriver.chrome.options からオプションをインポートする

def get_chrome_driver(プロキシ):
オプション = オプション()
options.add_argument(f'–proxy-server=http://{proxy}')
options.add_argument('–headless')
webdriver.Chrome(options=options) を返す
“`

  1. 動的コンテンツをスクレイピングする

パイソン
プロキシ = get_proxies()
ドライバー = get_chrome_driver(ランダムな選択(プロキシ))
ドライバー.get('https://quotes.toscrape.com/js/')
コンテンツ = ドライバー.ページソース
ドライバー終了()

詩的なメモ

Selenium では、ブラウザがブラシとなり、JavaScript、CSS、そしてインタラクティブ性の微妙な色合いなど、人間のユーザーが見るのと同じようにページを描画します。

利点と欠点

特徴 長所 短所
JSレンダリング あらゆる動的コンテンツを処理 リソースが豊富
プロキシローテーション IPを効果的にマスク プロキシはブラウザの速度を低下させたりブロックしたりする可能性がある
検出 より人間らしく、より検知されにくい 無料プロキシは大手サイトでブロックされることが多い

ワークフロー 3: Node.js 愛好家のための ProxyChain を使用した Puppeteer

材料

手順

  1. 無料プロキシを取得する

ジャバスクリプト
const axios = require('axios');
非同期関数 getProxies() {
const res = axios.get('https://www.proxy-list.download/api/v1/get?type=https'); を待機します。
res.data.split('\r\n').filter(Boolean) を返します。
}

  1. PuppeteerでProxyChainを使用してプロキシをローテーションする

「`javascript
const 操り人形師 = require('操り人形師');
const ProxyChain = require('proxy-chain');

(非同期() => {
const proxies = await getProxies();
for (const proxyUrl of proxys) {
const 匿名化プロキシ = ProxyChain.anonymizeProxy( を待機しますhttp://${プロキシURL});
const browser = await puppeteer.launch({
引数: [--proxy-server=${匿名プロキシ}, '–no-sandbox', '–disable-setuid-sandbox'],
ヘッドレス:本当、
});
const page = browser.newPage() を待機します。
試す {
page.goto('https://quotes.toscrape.com/js/', {waitUntil: 'networkidle2'}); を待機します。
const content = page.content() を待機します。
// コンテンツを処理します…
} キャッチ (e) {
// 不正なプロキシをスキップする
}
ブラウザを閉じるのを待ちます。
}
})();
“`

利点と欠点

特徴 長所 短所
オートメーション Node.js での堅牢なスクリプト Node.js 依存関係
プロキシローテーション ProxyChainは障害を管理する 無料プロキシは不安定/遅いことが多い
動的コンテンツ PuppeteerはすべてのJSをレンダリングします プロキシ速度によるレート制限

ワークフロー4: Scrapy + 無料プロキシミドルウェアを使用したスマートリクエストスケジューリング

材料

手順

  1. ミドルウェアをインストールする

pip で scrapy-rotating-proxies をインストールします

  1. Scrapy設定を構成する

パイソン
# 設定.py
ROTATING_PROXY_LIST_PATH = 'proxies.txt'
ダウンローダーミドルウェア = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}

  1. プロキシリストの作成

プロキシをダウンロードして保存する プロキシ.txt:

https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=1000&country=all&ssl=all&anonymity=all

  1. スクレイピースパイダーで削る

Scrapyは、プロキシをローテーションさせながら、動的コンテンツの庭をつま先立ちで歩き回ります。完全なJavaScriptを使用するには、 スクラップ劇作家:

バッシュ
pip で scrapy-playwright をインストールします

そしてあなたのスパイダーでは:

「`python
スクレイピーをインポートする

クラス QuotesSpider(scrapy.Spider):
名前 = “引用符”
start_urls = ['https://quotes.toscrape.com/js/']

   def start_requests(self): for url in self.start_urls: yield scrapy.Request(url, meta={"playwright": True}) def parse(self, response): for quote in response.css("div.quote"): yield { "text": quote.css("span.text::text").get(), "author": quote.css("small.author::text").get(), }

“`

利点と欠点

特徴 長所 短所
スピード 効率的なリクエストスケジューリング Scrapyの学習曲線
プロキシローテーション ミドルウェアが禁止事項を処理 無料プロキシの信頼性が低い
JSサポート Playwrightでは完全なJSを扱う ヘビー級のセットアップ

ワークフロー5: 無料プロキシゲートウェイを介したAPI指向のスクレイピング

材料

手順

  1. APIキーまたはプロキシエンドポイントを取得する

登録して無料のエンドポイントを入手してください。

  1. プロキシゲートウェイ経由のルートリクエスト

ScraperAPIの場合:

パイソン
api_key = 'YOUR_API_KEY'
url = f'http://api.scraperapi.com/?api_key={api_key}&url=https://quotes.toscrape.com/js/'
レスポンス = リクエスト.get(url)

Web 共有プロキシの場合は、前の例と同じように使用します。

利点と欠点

特徴 長所 短所
信頼性 マネージドプロキシ、ダウンタイムの短縮 限定無料リクエスト
使いやすさ 抄録プロキシローテーション 特定のサイトをブロックする場合があります
動的コンテンツ 一部のAPIはJSをレンダリングしてから返します 頻繁に使用する場合は有料プランをご利用ください

比較概要表

ワークフロー 動的JSサポート プロキシローテーション 信頼性 無料の制限 ベストユースケース
リクエスト + 無料プロキシ 低い マニュアル 低い ブロックされた/遅いプロキシ シンプルなXHR API
Selenium + 無料プロキシ 高い マニュアル 中くらい ブロックされたプロキシ、高いCPU使用率 複雑なJSサイト、小規模
パペティア + プロキシチェーン 高い 自動化 中くらい 頻繁なプロキシ障害 Node.jsの自動化
Scrapy + ローテーションプロキシ ハイ(劇作家と共演) 自動化 中くらい ミドルウェア構成、低速プロキシ スケーラブルで高度なスクレイピング
プロキシAPIゲートウェイ 高(APIに依存) 自動化 高い リクエストは限定されており、登録が必要です 一度きりの確実なスクレイピング

リソース


コードを彫刻刀、プロキシを大理石に見立てて、忍耐強く彫刻してください。すべての動的なページは、表面の下で啓示を待つデジタル彫刻なのです。

テオフィル・ボーヴェ

テオフィル・ボーヴェ

プロキシアナリスト

テオフィル・ボーヴェは、ProxyMist の 21 歳のプロキシ アナリストで、世界中のプロキシ サーバーの包括的なリストのキュレーションと更新を専門としています。テクノロジーとサイバー セキュリティに対する生来の適性を持つテオフィルは、信頼性の高い SOCKS、HTTP、エリート、匿名プロキシ サーバーを世界中のユーザーに無料で提供することで、チームの中核メンバーになりました。絵のように美しいリヨンの街で生まれ育ったテオフィルは、幼い頃からデジタル プライバシーとイノベーションに情熱を注いでいました。

コメント (0)

まだコメントはありません。あなたが最初のコメントを投稿できます!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です