ebook img

php|architect's Guide to Web Scraping PDF

192 Pages·2010·5.68 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview php|architect's Guide to Web Scraping

php|architect’s Guide to Web Scraping with PHP Matthew Turland php|architect’s Guide to Web Scraping with PHP byMatthewTurland php|architect’sGuidetoWebScraping ContentsCopyright©2009–2010MatthewTurland–AllRightsReserved Bookandcoverlayout,designandtextCopyright©2004-2010MarcoTabini&Associates,Inc.–AllRightsReserved FirstEdition:March2010 ISBN:978-0-9810345-1-5 ProducedinCanada PrintedintheUnitedStates Nopartofthisbookmaybereproduced,storedinaretrievalsystem,ortransmittedinanyformor bymeanswithoutthepriorwrittenpermissionofthepublisher,excetinthecaseofbriefquotations embeddedincriticalreviewsorarticles. Disclaimer Althougheveryefforthasbeenmadeinthepreparationofthisbooktoensuretheaccuracyofthe informationcontainedtherein, thisbookisprovided”as-is”andthepublisher, theauthor(s), their distributorsandretailers,aswellasallaffiliated,relatedorsubsidiarypartiestakenoresponsibility foranyinaccuracyandanyandalldamagescaused,eitherdirectlyorindirectly,bytheuseofsuch information. Wehaveendeavouredtoproperlyprovidetrademarkinformationonallcompaniesand productsmentionedinthebookbytheappropriateuseofcapitals.However,wecannotguaranteethe accuracyofsuchinformation. MarcoTabini&Associates,TheMTAlogo,php|architect,thephp|architectlogo,NanoBookandthe NanoBooklogoaretrademarksorregisteredtrademarksofMarcoTabini&Associates,Inc. Writtenby MatthewTurland Publishedby MarcoTabini&Associates,Inc. 28BombayAve. Toronto,ONM3H1B7 Canada (416)630-6202/(877)630-6202 [email protected]/www.phparch.com Publisher MarcoTabini TechnicalReviewer LukeGiuliani LayoutandDesign ArbiArzoumani ManagingEditor BethTuckerLong FinanceandResourceManagement EmanuelaCorso Coverpicture VladimirFofanov > m o c k. o o b e w o w w. w w < k o o B e w! o W m o d fr a o nl w o D > m o c k. o o b e w o w w. w w < k o o B e w! o W m o d fr a o nl w o D Contents Credits xiii Foreword xvii > m o c Chapter1—Introduction 1 k. o IntendedAudience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 bo e HowtoReadThisBook. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 w o w WebScrapingDefined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 w. w ApplicationsofWebScraping . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 w < AppropriateUseofWebScraping . . . . . . . . . . . . . . . . . . . . . . . . . 4 k o o LegalityofWebScraping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 B e TopicsCovered . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 w! o W m Chapter2—HTTP 7 o Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 d fr a o GETRequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 nl w AnatomyofaURL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 o D QueryStrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 POSTRequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 HEADRequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Responses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Headers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Redirection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 vi ” CONTENTS ReferringURLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 PersistentConnections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 ContentCaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 UserAgents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 BasicHTTPAuthentication . . . . . . . . . . . . . . . . . . . . . . . . . . 20 DigestHTTPAuthentication . . . . . . . . . . . . . . . . . . . . . . . . . 21 Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Chapter3—HTTPStreamsWrapper 27 SimpleRequestandResponseHandling . . . . . . . . . . . . . . . . . . . . . 28 StreamContextsandPOSTRequests . . . . . . . . . . . . . . . . . . . . . . . 29 ErrorHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 HTTPAuthentication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 m> o AFewMoreOptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 c k. o Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 o b e w o Chapter4—cURLExtension 35 w w. SimpleRequestandResponseHandling . . . . . . . . . . . . . . . . . . . . . 36 w w ContrastingGETandPOST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 < k o SettingMultipleOptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 o B HandlingHeaders. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 w! e Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 o W Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 m o HTTPAuthentication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 d fr a Redirection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 o nl w Referers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 o D ContentCaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 UserAgents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 ByteRanges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 DNSCaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Timeouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 RequestPooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 CONTENTS ” vii Chapter5—pecl_httpPECLExtension 49 GETRequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 POSTRequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 HandlingHeaders. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Timeouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 ContentEncoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 HTTPAuthentication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 RedirectionandReferers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 ContentCaching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 UserAgents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 ByteRanges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 > RequestPooling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 m o c Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 k. o o b e Chapter6—PEAR::HTTP_Client 61 w o RequestsandResponses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 w w. JugglingData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 w w < WranglingHeaders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 k o UsingtheClient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Bo e ObservingRequests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 w! o Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 W m o Chapter7—Zend_Http_Client 71 d fr a BasicRequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 o nl w Responses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 o D URLHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 CustomHeaders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Connectivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Redirection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 UserAgents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 viii ” CONTENTS HTTPAuthentication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Chapter8—RollingYourOwn 81 SendingRequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 ParsingResponses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 TransferEncoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 ContentEncoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Chapter9—TidyExtension 89 Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Tidy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 > m Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 o c k. Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 o o b Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 e w o Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 w w. Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 w w < k Chapter10—DOMExtension 99 o o B TypesofParsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 e w! LoadingDocuments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 o W TreeTerminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 m o ElementsandAttributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 d fr LocatingNodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 a o nl XPathandDOMXPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 w o AbsoluteAddressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 D RelativeAddressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 AddressingAttributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 CONTENTS ” ix Chapter11—SimpleXMLExtension 113 LoadingaDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 AccessingElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 AccessingAttributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 ComparingNodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 DOMInteroperability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Chapter12—XMLReaderExtension 121 LoadingaDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 ElementsandAttributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 m> o DOMInteroperation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 c k. o ClosingDocuments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 o b e Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 w o w w. Chapter13—CSSSelectorLibraries 129 w w ReasontoUseThem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 < k o Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 o B HierarchicalSelectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 w! e BasicFilters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 o W ContentFilters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 m o AttributeFilters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 d fr a ChildFilters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 o nl w FormFilters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 o D Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 PHPSimpleHTMLDOMParser . . . . . . . . . . . . . . . . . . . . . . . 138 Zend_Dom_Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 phpQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 DOMQuery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Wrap-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Description:
Despite all the advancements in web APIs and interoperability, it's inevitable that, at some point in your career, you will have to "scrape" content from a website that was not built with web services in mind. And, despite its sometimes less-than-stellar reputation, web scraping is usually an entire
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.