Pythonで最新のWebサむトスクレむピングを予玄したす。2番目のint。版"

画像こんにちは、䜏民プログラミングが魔法のようなものである堎合、Webスクレむピングは非垞に匷力な魔術です。簡単な自動プログラムを䜜成するこずで、Webサヌバヌに芁求を送信し、Webサヌバヌからデヌタを芁求し、それらを分析しお必芁な情報を抜出できたす。この本の新しい拡匵版は、Webスクレむピングを玹介するだけでなく、珟代のむンタヌネット䞊のあらゆる皮類のデヌタを収集するのにも圹立ちたす。パヌトIは、Webスクレむピングの仕組みに焊点を圓おおいたす。Pythonを䜿甚しおWebサヌバヌから情報を芁求し、基本的なサヌバヌ応答凊理を実行し、サむトずの自動察話を敎理する方法です。パヌトIIでは、Webスクレむピングのシナリオで圹立぀より具䜓的なツヌルずアプリケヌションに぀いお説明したす。 -耇雑なHTMLペヌゞを解析したす。-Scrapyフレヌムワヌクを䜿甚しお怜玢ロボットを開発したす。 -スクレむピングされたデヌタを保存する方法を孊びたす。 -ドキュメントからデヌタを読み取っお抜出したす。 -フォヌマットが䞍十分なデヌタをクリヌンアップしお正芏化したす。 -自然蚀語で情報を読み曞きしたす。 -フォヌムずログむンの怜玢をマスタヌしたす。 -JavaScriptスクレむピングずAPI䜜業に぀いお孊びたす。 -画像をテキストに倉換するプログラムを䜿甚および䜜成したす。 -スクレむピングトラップずボットブロッカヌをバむパスする方法を孊びたす。 -スクレむピングで自分のりェブサむトをテストしたす。-JavaScriptスクレむピングずAPI䜜業に぀いお孊びたす。 -画像をテキストに倉換するプログラムを䜿甚および䜜成したす。 -スクレむピングトラップずボットブロッカヌをバむパスする方法を孊びたす。 -スクレむピングで自分のりェブサむトをテストしたす。-JavaScriptスクレむピングずAPI䜜業に぀いお孊びたす。 -画像をテキストに倉換するプログラムを䜿甚および䜜成したす。 -スクレむピングトラップずボットブロッカヌをバむパスする方法を孊びたす。 -スクレむピングで自分のりェブサむトをテストしたす。



APIを䜿甚したWebクロヌル



JavaScriptは、䌝統的にWebクロヌラヌの普遍的な呪いず考えられおいたす。昔は、Webサヌバヌに送信したリク゚ストが、同じリク゚ストを行うこずでナヌザヌがブラりザに衚瀺するのず同じデヌタを確実に受信できるこずがありたした。



コンテンツを生成およびロヌドするためのJavaScriptおよびAjaxメ゜ッドが急増するに぀れお、䞊蚘の状況は䞀般的ではなくなり぀぀ありたす。第11章では、この問題を解決する1぀の方法、぀たりSeleniumを䜿甚しおブラりザヌを自動化し、デヌタをフェッチする方法に぀いお説明したした。これは簡単です。これはほずんど垞に機胜したす。



問題は、セレンのように匷力で効果的なハンマヌを手に持っおいるず、すべおのりェブスクレむピングタスクが釘のように感じ始めるこずです。



この章では、このJavaScriptをすべおバむパスしお実行したりロヌドしたりせずに、デヌタ゜ヌスそのデヌタを生成するAPIに盎接アクセスする方法を孊習したす。



APIの簡単な玹介



RESTAPI、GraphQL21、JSON、およびXMLのニュアンスに関する本、講挔、チュヌトリアルは無数にありたすが、それらはすべお1぀の単玔な抂念に基づいおいたす。 APIは、プログラムが異なる蚀語で蚘述されおいる堎合や構造が異なる堎合でも、あるプログラムが別のプログラムず察話できるようにする暙準化された構文を定矩したす。



このセクションでは、Web API特に、Webサヌバヌがブラりザヌず察話できるようにするAPIに焊点を圓おたす。ここでは、APIずはこのタむプのむンタヌフェヌスを意味したす。ただし、他のコンテキストでは、APIは䞀般的な甚語でもあり、たずえば、Javaプログラムが同じコンピュヌタヌで実行されおいるPythonプログラムず察話できるようにするむンタヌフェむスを意味する堎合があるこずに泚意しおください。 APIは必ずしも「むンタヌネット䞊のむンタヌフェヌス」を意味するわけではなく、Webテクノロゞヌを含める必芁はありたせん。



Web APIは、広く宣䌝され、十分に文曞化されたオヌプン゜ヌスサヌビスず察話するために開発者によっお最も䞀般的に䜿甚されたす。たずえば、アメリカのケヌブルスポヌツTVチャンネルESPNは、アスリヌトやゲヌムのスコアなどに関する情報のAPIhttp://www.espn.com/apis/devcenter/docs/を提䟛しおいたす。Googleには開発者セクションhttps/ /console.developers.google.com蚀語の翻蚳、分析、ゞオロケヌション甚のAPIが数十ありたす。



これらすべおのAPIのドキュメントでは、通垞、これらのURLの䞀郚ずしお、たたはGETパラメヌタヌずしお機胜する可倉パラメヌタヌを䜿甚しお、芁求可胜なURLの圢匏でルヌトたたぱンドポむントに぀いお説明しおいたす。



たずえば、次のURLでは、pathparamはパスパラメヌタです。



example.com/the-api-route/pathparam



そしおここpathparamは、パラメヌタ1パラメヌタの倀である



example.com/the-api-route?param1=pathparam



APIぞデヌタを転送するどちらの方法があるが、非垞に広く䜿甚されおいたす、コンピュヌタサむ゚ンスの他の倚くの偎面ず同様に、倉数がパスを介しお枡されるタむミングず堎所、およびパラメヌタを介しお枡されるタむミングに぀いお、熱心な哲孊的議論の察象ずなっおいたす。



APIリク゚ストぞの応答は、通垞、JSONたたはXML圢匏で返されたす。珟圚、JSONはXMLよりもはるかに人気がありたすが、XMLにも遭遇するこずがありたす。倚くのAPIでは、応答のタむプを遞択できたす。通垞は、受信する応答のタむプを決定する別のパラメヌタヌを䜿甚したす。



APIリク゚ストに察するJSON応答の䟋を次に瀺したす。



{"user":{"id": 123, "name": "Ryan Mitchell", "city": "Boston"}}
      
      







そしお、これがXML圢匏のAPIリク゚ストぞの応答です。



<user><id>123</id><name>Ryan Mitchell</name><city>Boston</city></user>
      
      







サむトip-api.comhttp://ip-api.com/には、IPアドレスを実際の物理アドレスに倉換する明確で䟿利なAPIがありたす。次の



ip-api.com/json/50.78.253.58 をブラりザに入力しお、簡単なAPIリク゚ストを䜜成しおみるず、次の



ような応答が返されたす 。



{"ip":"50.78.253.58","country_code":"US","country_name":"United States",
"region_code":"MA","region_name":"Massachusetts","city":"Boston",
"zip_code":"02116","time_zone":"America/New_York","latitude":42.3496,
"longitude":-71.0746,"metro_code":506}

      
      





リク゚ストにはjsonパスパラメヌタがあるこずに泚意しおください。 XMLたたはCSV圢匏で応答を取埗するには、適切な圢匏に眮き換える必芁がありたす



。ip

-api.com
/ xml / 50.78.253.58 ip-api.com/csv/50.78.253.58API



およびHTTPメ゜ッド



前のセクション、APIを調べ、情報を取埗するためにサヌバヌにGETリク゚ストを送信したした。 HTTPを介しおWebサヌバヌに情報を芁求する䞻な方法たたは方法は4぀ありたす



。

- 圹職;

-プット;

-削陀。



技術的には、4皮類以䞊のリク゚ストがありたすたずえば、ただHEAD、OPTIONS、CONNECTがありたすが、APIで䜿甚されるこずはめったになく、それらに遭遇する可胜性はほずんどありたせん。 APIの倧郚分は、これら4぀のメ゜ッドに制限されおおり、堎合によっおはそれらの䞀郚にさえ制限されおいたす。 GETのみ、たたはGETずPOSTのみを䜿甚するAPIは垞に存圚したす。



GETは、ブラりザのアドレスバヌにアドレスを入力しおサむトにアクセスするずきに䜿甚するリク゚ストです。ずき あなたはip-api.com/json/50.78.253.58を蚪問し、あなたは、GETメ゜ッドを䜿甚しおいたす。このリク゚ストは、「ねえ、りェブサヌバヌ、この情報を教えおください」ずいうコマンドず考えるこずができたす。



GET芁求は、定矩䞊、サヌバヌデヌタベヌスの内容を倉曎したせん。䜕も保存されず、䜕も倉曎されたせん。情報は読み取られるだけです。



POSTは、フォヌムぞの入力たたは情報の送信時に䜿甚される芁求であり、おそらくサヌバヌスクリプトによる凊理を目的ずしおいたす。サむトにログむンするたびに、POSTリク゚ストを行い、ナヌザヌ名ずできれば暗号化されたパスワヌドを枡したす。 APIを介しおPOSTリク゚ストを行うこずで、サヌバヌに「この情報をデヌタベヌスに保存しおください」ず䌝えおいるこずになりたす。



サむトずやり取りするずきのPUTリク゚ストはあたり䜿甚されたせんが、APIで発生するこずがありたす。このリク゚ストは、オブゞェクトたたは情報を倉曎するために䜿甚されたす。たずえば、APIはPOSTリク゚ストを䜿甚しおナヌザヌを䜜成し、PUTリク゚ストを䜿甚しおナヌザヌのメヌルアドレスを倉曎できたす。



ご想像のずおり、DELETEリク゚ストはオブゞェクトを削陀するために䜿甚されたす。たずえば、DELETEリク゚ストをmyapi.com/user/23に送信する ず、ナヌザヌID 23が削陀されたす。DELETEメ゜ッドは、䞻に情報を配垃したり、ナヌザヌが䜜成できるようにするために䜜成されるため、オヌプンAPIではあたり芋られたせん。たたは情報を公開したすが、デヌタベヌスから削陀しないでください。



GET、POST、PUT、およびDELETEリク゚ストずは異なり、デヌタがリク゚ストされたURLたたはルヌトに加えお、リク゚ストの本文で情報を枡すこずができたす。

Webサヌバヌから受信した応答ず同様に、リク゚スト本文のこのデヌタは通垞JSONであるか、あたり䞀般的ではありたせんがXMLです。特定のデヌタ圢匏は、API構文によっお決定されたす。たずえば、ブログ投皿にコメントを远加するAPIを䜿甚する堎合、次のPUTリク゚ストを䜜成できたす



example.com/commentspost = 123 次の



ようなリク゚スト本文を䜿甚したす。



{"title": "Great post about APIs!", "body": "Very informative. Really helped me out with a tricky technical challenge I was facing. Thanks for taking the time to write such a detailed blog post about PUT requests!", "author": {"name": "Ryan Mitchell", "website": "http://pythonscraping.com", "company": "O'Reilly Media"}}
      
      







ブログ投皿ID123がURLのパラメヌタヌずしお枡され、䜜成したコメントのコンテンツがリク゚スト本文に枡されるこずに泚意しおください。パラメヌタずデヌタは、パラメヌタずリク゚スト本文の䞡方で枡すこずができたす。どのパラメヌタヌが必芁で、どこに枡されるかは、API構文によっお決定されたす。



APIリク゚ストぞの応答の詳现



この章の冒頭のip-api.comの䟋で芋たように、APIの重芁な機胜は、これらのむンタヌフェむスが適切にフォヌマットされた応答を返すこずです。最も䞀般的な応答圢匏は、XMLeXtensible Markup LanguageずJSONJavaScript Object Notationです。



近幎、いく぀かの䞻な理由から、JSONはXMLよりもはるかに人気がありたす。たず、JSONファむルは通垞、巧劙に䜜成されたXMLファむルよりも小さいです。たずえば、98文字の長さの次のXMLデヌタを比范したす。



<user><firstname>Ryan</firstname><lastname>Mitchell</
lastname><username>Kludgist</username></user>
      
      





同じJSONデヌタを芋おみたしょう。



{"user":{"firstname":"Ryan","lastname":"Mitchell","username":"Kludgist"}}
      
      







これはわずか73文字で、同じXMLデヌタよりも36少なくなっおいたす。

もちろん、XMLは次のようにフォヌマットできる可胜性がありたす。



<user firstname="ryan" lastname="mitchell" username="Kludgist"></user>
      
      







ただし、このビュヌはディヌプデヌタのネストをサポヌトしおいないため、これはお勧めしたせん。それでも、゚ントリの長さは71文字で、同等のJSONずほが同じです。



JSONがXMLよりも急速に普及しおいるもう1぀の理由は、Webテクノロゞヌの倉化に関係しおいたす。以前は、API受信者は䞻にPHPたたは.NETサヌバヌサむドスクリプトでした。これで、AngularやBackboneなどのフレヌムワヌクがAPI呌び出しを送受信するこずが刀明する可胜性がありたす。サヌバヌテクノロゞヌは、ある皋床、デヌタがどのような圢匏をずるかを気にしたせん。ただし、BackboneなどのJavaScriptラむブラリでは、JSONの凊理が簡単です。



APIはXMLたたはJSON圢匏のいずれかで応答を返すこずが䞀般的に認められおいたすが、他のオプションも可胜です。 API応答タむプは、このむンタヌフェヌスを䜜成したプログラマヌの想像力によっおのみ制限されたす。もう1぀の兞型的な応答圢匏はCSVですip-api.comの䟋を参照。個別のAPIを䜿甚するず、ファむルを䜜成するこずもできたす。サヌバヌにリク゚ストを送信するず、指定したテキストがスヌパヌむンポヌズされた画像が生成されたす。たたは、特定のXLSXたたはPDFファむルをリク゚ストするこずもできたす。



䞀郚のAPIは、応答をたったく返したせん。たずえば、ブログ投皿にコメントを䜜成するようにサヌバヌにリク゚ストを送信するず、サヌバヌは200のHTTP応答コヌドしか返すこずができたせん。これは次のこずを意味したす。すべお順調"他のク゚リは、次のような最小限の応答を返す堎合がありたす。



{"success": true}
      
      







゚ラヌが発生した堎合は、次の応答が埗られたす。



{"error": {"message": "Something super bad happened"}}
      
      







たたは、APIが適切に構成されおいない堎合、刀読できないスタックトレヌスたたは英語のテキストが衚瀺される可胜性がありたす。APIにリク゚ストを送信するずきは、通垞、受信するレスポンスが実際にJSON圢匏たたはXML、CSV、たたは受信する予定の圢匏であるこずを最初に確認するのが理にかなっおいたす。



著者に぀いお



Ryan Mitchellは、ボストンのHedgeServのシニア゜フトりェア゚ンゞニアであり、デヌタ分析甚のAPIずツヌルを開発しおいたす。ラむアンは工孊技術倧孊を卒業したした。 Franklin V. Olinは、ハヌバヌド倧孊の継続教育コヌスで゜フトりェア゚ンゞニアリングの修士号ずデヌタ分析および凊理の蚌明曞を取埗しおいたす。 HedgeServに参加する前、ラむアンはAbineで働き、PythonでWebスクレむパヌず自動化ツヌルを開発したした。圌は定期的に小売、金融、補薬のWebスクレむピングプロゞェクトに぀いおアドバむスしおいたす。ノヌスむヌスタン倧孊ず゚ンゞニアリングアンドテクノロゞヌ倧孊でコンサルタントおよびフリヌランスの教垫ずしお同時に働いおいたす。フランクリンV.オヌリン。



この本に぀いおの詳现は、䞊で芋぀けるこずができる 出版瀟のりェブサむト

» 目次

» 抜粋



に぀いおは居䜏者クヌポンで25割匕- Pythonの



曞籍の玙のバヌゞョンの支払いの際、電子曞籍は、電子に送信されたす-郵䟿物。



All Articles