MENU
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
あらゆるモノにHackする、探究者の読み物。
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
  1. ホーム
  2. プログラミング
  3. 言語別
  4. Python
  5. 【Pythonスクレイピング入門】BOTアクセス対策サイトをrequests+UserAgent偽装で切り抜ける

【Pythonスクレイピング入門】BOTアクセス対策サイトをrequests+UserAgent偽装で切り抜ける

2023 2/02
Python
2019-01-15 2023-02-02
目次

事前準備

import requests
from bs4 import BeautiflSoup as bs4

url='https://www.yahoo.co.jp'
res=requests.get(url)

soup = bs4(res.content,'lxml')
print(soup.select('#topicsfb > div.topicsindex > ul.emphasis'))

詳しくは下記記事参照

あわせて読みたい
【Pythonスクレイピング入門】bs4(BeautifulSoup)をインストール 【事前準備】 requestsでヤフーのトップページにGETリクエストを送ってレスポンスを取得。res変数にhttpレスポンス格納済みです。 import requests url='https://www.ya...

で、まぁこの記事で完了するはずだったんですが、想定外にもヤフーのトップに弾かれるという事態が起きました。

ヤフーからのレスポンスを見る限り、ヤフーのサーバーはアクセス元のブラウザを確認していて、特定の条件を満たさない場合、普段と違うページを表示しているワケです。

今回はこのタイプのサイトにrequestsから正常にアクセスして、普段人間が見ている画面と同じHTMLを返させる方法です。

原因はUA(ユーザーエージェント)

UAとは?

ユーザーエージェント (User agent)とは、利用者があるプロトコルに基づいてデータを利用する際に用いるソフトウェアまたはハードウェアのこと。
特にHypertext Transfer Protocolを用いてWorld Wide Webにアクセスする、ウェブブラウザなどのソフトウェアのこと。

ja.wikipedia.org

なげーよ。わかんねーよ。

一言で僕が言い換えて差し上げますと「基本的にブラウザ」のことです。

最後の一行だけで良い気もしますが、要するに「まぁ、みんながぱっと思い浮かぶのはブラウザだけど、それだけじゃないよね」ってことを書いてます。

サーバーはどうやってUAを見てるの?

HTTPというのはリクエストとレスポンスでできています。要求と返答です。

リクエストの時点でこちらの情報をある程度渡す必要があるんですね。

これをリクエストヘッダと言います。UA情報はリクエストヘッダに含まれています。

requestsではリクエストヘッダを書き換えて渡すことが可能です。

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
url = 'https://www.yahoo.co.jp'
res = requests.get(url,headers=headers)

requestsのGETメソッドを投げるときにheadersと言うキーワード引数に渡します。一回上でheadersという変数に代入してますが、別にgetメソッドの中で直接渡してももちろん動きます。

ヤフーからのレスポンス

res.content

明らかに違いますね。今度こそ soup で抜き出してみましょう。

soup = bs4(res.content,'lxml')
print(soup.select('#topicsfb > div.topicsindex > ul.emphasis')[0].text)

>>>'統計不正 参考人が欠席連発写真東京医大 寄付した7人加点か写真NEW小4女児死亡 父親を起訴へ写真DASH村の叫び 地域消滅する写真NEW就活の適性検査 どこまで重視写真NEW打てない?阪神 緊急策必要か写真NEWビバヒル ディラン役が死去写真漣さんと共演 天海祐希が直訴写真'

まとめ

できた!

次の記事

あわせて読みたい
【Python】BeautifulSoupの使い方・基本メソッド一覧|スクレイピング 目的のHTMLタグや、テキストの抜き出しに使うPythonのライブラリBeautifulSoupについて詳しく解説
Python
requests UA偽装 スクレイピング
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (1件)

  • ヒロ より:
    2021-03-02 15:20

    UA偽装してtwitterスクレイピングすればAPIにはじかれた者たちの弔いができる…?

    返信

コメントする コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

シンプル美と機能性を両立させた、国内最高峰のWordPressテーマ『SWELL』
人気記事
  • IQテストいくつか受けてみました
    ネット上で信憑性がありそうなIQテスト、5種類まとめて受けた結果…
  • hayate
    メルカリの商品を世界最速で購入するためだけのアラートツール
  • 【Python】BeautifulSoupの使い方・基本メソッド一覧|スクレイピング
  • Pythonファイルのexe化
    【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる
  • Amazon Echo アレクサのコマンドまとめ
    AmazonEchoの使い方とできる事、アレクサへの指示コマンド一覧
最近の投稿
  • PyQt5 QListWidget の item削除でtextBoxのフォーカスが奪われる2023-03-05
  • WordPressからのメールが届かない時の調査と解決法2023-02-27
  • 保護中: メルカリアラートツール「疾風」v22022-12-01
  • 保護中: メルカリアラートツール【疾風】カスタマイズオプション一覧2021-03-22
  • 保護中: メルカリアラートツール【疾風】インストール手順2021-03-22
目次
目次