Bingニュースのスクレイピング方法
Advanced Data Extraction Specialist
TL;DR:
- Bing Newsの結果は
.news-card要素に表示され、クリーンなデータはテキストではなく属性に格納されています。 各カードにはdata-title、url属性、data-author(出版者)が含まれており、タイムスタンプと混在するレンダリングされたテキストをスクレイピングするのではなく、これらを読み取るべきです。 - ページはクライアントサイドでレンダリングされるため、実際のブラウザが必要です。 Bingは初期ロード後にJavaScriptを使ってニュースグリッドを構築します。プレーンHTTPフェッチではスケルトンが返され、カードは表示されません。
- ページネーションはURLのオフセットです。 深い結果ページを取得するには
&first=11、&first=21などを追加します — クリックする「次へ」ボタンはなく、ただオフセットのみです。 title属性からスニペットを取得します。.snippetは画面で切り取られたテキストを表示しますが、完全な要約はそのtitle属性に格納されています。- 安定した結果のために米国の住宅出口を固定します。 BingはIPによってローカライズとレート制限を行います; 一貫した米国の住宅セッションにより、結果セットとマークアップが予測可能になります。
- 無料で開始可能です。 新しいScrapelessアカウントには無料のスクレイピングブラウザランタイムが含まれています — app.scrapeless.comでサインアップしてください。
イントロダクション: Bing Newsを構造化フィードに変える
Bing Newsの検索ページは、ライブでクエリ駆動のフィードです — 提供されたトピックに対する見出し、出版者、タイムスタンプ、要約が含まれています。これはブランドモニタリング、市場調査、およびAIエージェントに新しい記事を供給するために役立ちます。問題は、これらの情報がクリーンなHTMLとして取得できないことです。
グリッドはブラウザで構築されます。 bing.com/news/searchをプレーンHTTPクライアントで読み込むと、ページの骨組みが取得され、ストーリーは得られません — カードはJavaScriptが実行された後にしか表示されません。そして、一度レンダリングされると、画面上のテキストは出版者と相対的な時間を混ぜ合わせるため(「15時間前 - MSN」)、innerText を読んでもそれが混乱します。
このガイドでは、ScrapelessスクレイピングブラウザでBing Newsスクレイパーを運用し、Bingが各カードに既に添付している構造化属性を読み取ります。以下のすべてのスニペットはライブ検索に対して実行されました。公開結果のみ。
何ができるか
- トピックフィードの構築 — 検索用語に対するすべての見出し、出版者、リンク、要約を取得する。
- ブランドや製品の監視 — 同じクエリをスケジュールで再実行し、結果を比較する。
- 記事のURLを収集 — 下流のフルテキストクローラーに渡すために。
first=オフセットを使って深い結果ページを歩く — 最初の画面よりもはるかに多くを収集する。- AIエージェントにクリーンで構造化されたニュースセットを供給 — 生のHTMLの代わりに。
Scrapelessスクレイピングブラウザの利点
Scrapelessスクレイピングブラウザは、ウェブクローラーとAIエージェントのために設計されたカスタマイズ可能で検出防止のクラウドブラウザです。特にBing Newsのために、次の特徴を持っています:
- 独自開発のChromium — ニュースグリッドを構築するJavaScriptをレンダリングし、カードがDOMに実際に存在するようにします。
- 検出防止のフィンガープリンティング — セッションは実際のブラウザとして読み取られるため、結果ページは通常通りにサービスされます。
- 195か国以上の住宅プロキシ — 米国の出口を固定し、Bingが一貫したローカライズされた結果セットを返すようにする。
- セッション持続性 — ページネーションリクエストを通じて1つのセッションをウォームに保つ。
- 標準のPuppeteer接続 —
Puppeteer.connect()は通常のBrowserを返し、抽出コードはプレーンなPuppeteerです。
app.scrapeless.comで無料プランのAPIキーを取得してください。
前提条件
- Node.js 18 以上
- ScrapelessアカウントとAPIキー — app.scrapeless.comでサインアップ
- Puppeteerに関する基本的な知識
インストール
bash
npm install @scrapeless-ai/sdk puppeteer-core
bash
export SCRAPELESS_API_KEY="your_api_token_here"
ステップ1 — 接続して検索をロードする
クラウドブラウザに接続し、米国の出口を固定し、クエリのニュース検索URLを開きます。クエリは q パラメーターに入れます:
javascript
import { Puppeteer } from '@scrapeless-ai/sdk';
const browser = await Puppeteer.connect({
apiKey: process.env.SCRAPELESS_API_KEY,
sessionName: 'bing-news',
proxyCountry: 'US',
sessionTTL: 300,
});
const page = await browser.newPage();
const query = 'openai';
await page.goto(`https://www.bing.com/news/search?q=${encodeURIComponent(query)}`, {
waitUntil: 'networkidle2',
timeout: 60000,
});
console.log(await page.title());
// 'openai - ニュース検索'
networkidle2 は結果リクエストが安定するのを待ち、カードがDOMに存在する状態で読み取ります。
ステップ2 — 属性からカードを抽出する
各結果は .news-card です。レンダリングされたテキストを解析するのではなく、Bingがカードに添付する構造化属性を読み取ります — それによりクリーンなタイトル、リンク、出版者を直接取得できます:
javascript
const articles = await page.evaluate(() => {
javascript
const abs = (u) => { try { return new URL(u, location.href).href; } catch { return null; } };
return [...document.querySelectorAll('.news-card')]
.map((card) => ({
title: card.getAttribute('data-title'),
url: abs(card.getAttribute('url')),
source: card.getAttribute('data-author'),
snippet:
card.querySelector('.snippet')?.getAttribute('title') ||
card.querySelector('.snippet')?.innerText?.trim() ||
null,
}))
.filter((a) => a.title && a.url);
});
console.log(articles.length, '記事');
console.log(articles[0]);
// 12 記事
// {
// title: "日本のテクノロジー企業ソフトバンクがサイバー攻撃に対するOpenAIの「パッチ」を展開",
// url: 'https://apnews.com/article/openai-softbank-japan-technology-intelligence-cyberattacks-d8d3f9b2e5042ea949a7d5c53b782d96',
// source: 'AP通信',
// snippet: '日本のテクノロジー大手ソフトバンクグループ株式会社がサービスを立ち上げています...'
// }
data-authorは、著者名(「AP通信」)のみに関連するもので、表示テキストには「MSNで15時間前」といったタイムスタンプは含まれていません。.snippet要素は表示面では切り捨てられますが、そのtitle属性には完全な要約が保持されているので、まずはそれを読み取ってください。
無料プランでAPIキーを取得してください:app.scrapeless.com
ステップ3 — より深い結果をページングする
Bingニュースは、URLのfirst=オフセットでページングします — 次へボタンはなく、単にオフセットを10ずつ進めます。同じセッションを再利用し、タイトルで重複を除去します。Bingはページ間でカードの順序を変更する場合があります。
javascript
const seen = new Map();
for (const first of [1, 11, 21]) {
await page.goto(
`https://www.bing.com/news/search?q=${encodeURIComponent(query)}&first=${first}`,
{ waitUntil: 'networkidle2', timeout: 60000 }
);
const batch = await page.evaluate(() =>
[...document.querySelectorAll('.news-card')]
.map((card) => card.getAttribute('data-title'))
.filter(Boolean)
);
for (const title of batch) seen.set(title, true);
console.log(`first=${first}: ${batch.length}件のカード、現在${seen.size}件のユニークなものがあります`);
}
// first=1: 10件のカード、10件のユニークなものがあります
// first=11: 10件のカード、18件のユニークなものがあります
// first=21: 10件のカード、26件のユニークなものがあります
各オフセットは約10件のカードを返します。ユニークカウントは進むにつれて増加します。ユニークトータルが停止するまで進めてください — それがクエリの結果セットの終わりです。
返されるもの
各記事はフラットなレコードです — タイトル、リンク、出版社、要約:
json
[
{
"title": "ソフトバンクがOpenAIモデルに基づくサイバーセキュリティ製品を発表",
"url": "https://www.msn.com/en-in/lifestyle/style/softbank-launches-cybersecurity-product-based-on-openai-models/ar-AA25LC2i",
"source": "MSNの経済タイムズ",
"snippet": "「サービスとしてのパッチ」製品は、合弁事業を通じて日本で展開されます..."
}
]
// スキーマは、ステップ2の評価結果を正確に反映しています。フィールド値は例示サンプルです。
いくつかの誠実な観察:
- ページごとの結果数は固定ではありません。 最初の画面では約10件のカードがレンダリングされましたが、オフセットページでは各10件が返されました。取得したものをカウントし、ページサイズを仮定しないでください。
- オフセット間でのカードの繰り返しがあります。 Bingは結果を再整理するので、ページングの際にはタイトルやURLで重複を除去してください。
- 出版社の形式は異なります。
data-authorは通常、クリーンな名称ですが、配信記事は「… on MSN」と読み取られます。出版社に基づいてキーナイズする場合は正規化してください。 - リンクは外部サイトを指します。
url属性は、Bingリダイレクトではなく出版社の記事に解決されます — 完全なテキストのクローラーに直接渡すのに便利です。
結論: 構造化されたBingニュースフィード
信頼できるBingニューススクレイパーは、レンダリング → カード属性の読み取り → first=オフセットのステップです。実際のブラウザでレンダリングし、表示テキストを解読せずにdata-title/url/data-authorを取得し、オフセットごとにページングしながら重複を除去します。Scrapeless Scraping Browser上で実行することで、結果が一貫して読み込まれるように、Chromiumレンダリングと住宅的な出入口が提供されます。収集したリンクをフル記事の本文に変えるには、同じ方法で構築されたサイトスクレイパーと組み合わせてください。スクレイピングブラウザの製品ページとドキュメントは、完全なSDKサーフェスをカバーしています。米国の出入り口を固定し、属性を読み取り、オフセットを移動してください。
AI駆動のデータパイプラインを構築する準備はできましたか?
無料プランを取得し、ニュースや検索のパイプラインを構築している開発者と接続するために、コミュニティに参加してください:Discord · Telegram。
[app.scrapeless.com](https://app.scrapeless.com/passport/login/?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-bing-news)で無料のScraping Browserランタイムにサインアップし、上記のパターンを監視ニーズに合わせたクエリと地域に適応させてください。[価格](https://www.scrapeless.com/ja/pricing?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrape-bing-news)をご覧ください。
---
## よくある質問
**Q: Bingニュースをスクレイピングすることは合法ですか?**
一般的に公開されている検索結果の収集は許可されていますが、Bingの利用規約と地域の法律はデータの保存と使用方法に適用されます。公開結果のみをスクレイピングし、<a href="https://datatracker.ietf.org/doc/html/rfc9309" rel="nofollow"><strong>ロボットおよび利用規約に関するルール</strong></a>を尊重し、あなたの使用ケースについて法律相談を行ってください。
**Q: プロキシは必要ですか?**
はい — `proxyCountry: 'US'`(またはターゲット地域)を指定してください。BingはIPによってローカライズおよびレート制限を行うため、一貫した住宅エグレスが結果セットとマークアップを安定させます。
**Q: ページは得られますが、カードが表示されません。何が問題ですか?**
カードはJavaScriptによってレンダリングされます。通常のHTTPフェッチではシェルだけが返されますので、Scraping Browserでページを読み込み、`networkidle2`まで待ってからDOM内にグリッドが存在するか確認してください。
**Q: 1ページ以上の結果を取得するにはどうすればいいですか?**
URLの`first=`オフセットをステップして、`&first=11`、`&first=21`など、同じセッションを再利用し、タイトルで重複を削除してください。いくつかのカードはページ間で再表示されることがあります。
**Q: マークアップが変更されて、セレクターが壊れました。なぜですか?**
Bingは定期的にレイアウトを更新します。ライブページと比較してカード属性名(`data-title`、`url`、`data-author`)を再確認し、変化した場合はセレクターを厳密にしてください。
**Q: どれだけの並行クエリを実行できますか?**
並行性は控えめに保ってください — 同じサイトに対する並行実行の安全な上限はホストごとに3セッションです。
**Q: AIエージェントなしでこれを実行できますか?**
はい。Scrapelessセッションの上で通常のPuppeteerを使用するだけで、エージェントは不要です。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



