From 9199fb66afc761367054b442221dc3e4bb11b717 Mon Sep 17 00:00:00 2001 From: Adam Yang Date: Sun, 24 Dec 2017 15:00:55 +0800 Subject: [PATCH 1/4] Fix code issues and upgrade libraries to python3 --- chapter1/.DS_Store | Bin 6148 -> 0 bytes chapter1/2-beautifulSoup.py | 2 +- chapter1/3-exceptionHandling.py | 2 +- chapter10/2-waitForLoad.py | 1 + chapter11/ghostdriver.log | 36 -------- chapter11/page.jpg | Bin 69920 -> 0 bytes chapter11/page.txt | 47 ----------- chapter13/1-wikiUnitTest.py | 4 +- chapter13/2-wikiSeleniumTest.py | 2 +- chapter13/4-dragAndDrop.py | 4 +- chapter13/5-takeScreenshot.py | 3 +- chapter13/6-combinedTest.py | 1 + chapter13/ghostdriver.log | 6 -- chapter2/.DS_Store | Bin 6148 -> 0 bytes chapter3/.DS_Store | Bin 6148 -> 0 bytes chapter3/scrapy/.DS_Store | Bin 6148 -> 0 bytes chapter3/scrapy/wikiSpider/.DS_Store | Bin 6148 -> 0 bytes chapter3/scrapy/wikiSpider/articles.csv | 67 --------------- chapter3/scrapy/wikiSpider/articles.json | 66 --------------- chapter3/scrapy/wikiSpider/scrapy.cfg | 2 +- chapter3/scrapy/wikiSpider/wiki.log | 18 ---- .../scrapy/wikiSpider/wikiSpider/.DS_Store | Bin 6148 -> 0 bytes .../scrapy/wikiSpider/wikiSpider/__init__.pyc | Bin 169 -> 0 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 197 bytes .../__pycache__/items.cpython-35.pyc | Bin 0 -> 418 bytes .../__pycache__/settings.cpython-35.pyc | Bin 0 -> 320 bytes .../scrapy/wikiSpider/wikiSpider/items.py | 6 +- .../scrapy/wikiSpider/wikiSpider/items.pyc | Bin 486 -> 0 bytes .../wikiSpider/wikiSpider/middlewares.py | 56 +++++++++++++ .../scrapy/wikiSpider/wikiSpider/settings.py | 79 +++++++++++++++++- .../scrapy/wikiSpider/wikiSpider/settings.pyc | Bin 285 -> 0 bytes .../wikiSpider/wikiSpider/spiders/.DS_Store | Bin 6148 -> 0 bytes .../wikiSpider/spiders/__init__.pyc | Bin 177 -> 0 bytes .../__pycache__/__init__.cpython-35.pyc | Bin 0 -> 205 bytes .../__pycache__/articleSpider.cpython-35.pyc | Bin 0 -> 1140 bytes .../wikiSpider/spiders/articleSpider.py | 30 ++++--- .../wikiSpider/spiders/articleSpider.pyc | Bin 1384 -> 0 bytes chapter4/.DS_Store | Bin 6148 -> 0 bytes chapter4/1-searchTwitter.py | 2 +- chapter4/2-updateTwitter.py | 2 +- chapter5/1-getPageMedia.py | 2 +- chapter5/3-scrapeCsv.py | 2 +- chapter5/4-mysqlBasicExample.py | 3 +- chapter5/5-storeWikiLinks.py | 2 +- chapter5/6-6DegreesCrawlWiki.py | 2 +- chapter5/8-sendEmailWhenChristmas.py | 6 +- chapter6/6-readDocx.py | 13 ++- chapter6/from urllib.request import urlopen | 10 --- chapter6/readPdf.py | 24 ------ chapter8/4-6DegreesFinder.py | 2 +- chapter8/7-NltkAnalysis.py | 6 +- chapter9/1-fileSubmission.py | 5 -- 52 files changed, 187 insertions(+), 326 deletions(-) delete mode 100644 chapter1/.DS_Store delete mode 100644 chapter11/ghostdriver.log delete mode 100644 chapter11/page.jpg delete mode 100644 chapter11/page.txt delete mode 100644 chapter13/ghostdriver.log delete mode 100644 chapter2/.DS_Store delete mode 100644 chapter3/.DS_Store delete mode 100644 chapter3/scrapy/.DS_Store delete mode 100644 chapter3/scrapy/wikiSpider/.DS_Store delete mode 100644 chapter3/scrapy/wikiSpider/articles.csv delete mode 100644 chapter3/scrapy/wikiSpider/articles.json delete mode 100644 chapter3/scrapy/wikiSpider/wiki.log delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/.DS_Store delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/__init__.pyc create mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/__init__.cpython-35.pyc create mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/items.cpython-35.pyc create mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/settings.cpython-35.pyc delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/items.pyc create mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/middlewares.py delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/settings.pyc delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/spiders/.DS_Store delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/spiders/__init__.pyc create mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/__init__.cpython-35.pyc create mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/articleSpider.cpython-35.pyc delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.pyc delete mode 100644 chapter4/.DS_Store delete mode 100644 chapter6/from urllib.request import urlopen delete mode 100644 chapter6/readPdf.py delete mode 100644 chapter9/1-fileSubmission.py diff --git a/chapter1/.DS_Store b/chapter1/.DS_Store deleted file mode 100644 index 893bc14b74fca35d9c73bc2a245ef3be5d620c7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO-sW-5Pcgfw0Nl=#AA+L6smt9lvM21`~Wp+ltOHRTF_g5pg+KWQ{U_kg^+p` z(HWR|`!#Qymy+29;HK-v1Q-Jt(gmXt!w!>q@t#FGG9Wt7k>M3Jo>9)L-fA28jS9%S z8{r%>hR)@2@WMs?Iqpe~l~p>Bbvdz#%3$LymjAV2J`Vys`a+1{F%OHF%#_9fl8K zphugH5a0+Go}pykn!7IXK&J3GChIKMmjW4|0O324z2 zFa^2_?1k=F>i_Kf`+qmddZvIW@TU}TgEUL0d?c-{y@!)p8`JOTVzRCcxJ_ZhmtwA! dQhY-9#_?Dh#6+oZxQ3-7QGt5+tyE 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 z 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ⓈPlNU6)L%0`gY*$FiJF)8hK{S%kHsqhI@@sg!wz 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 C)*B`O diff --git a/chapter11/page.txt b/chapter11/page.txt deleted file mode 100644 index fdd6a7f..0000000 --- a/chapter11/page.txt +++ /dev/null @@ -1,47 +0,0 @@ -WEI‘ nrrd Peace -Len Nlkelayevldu Iolfluy - -Readmg shmdd be ax -wlnvame asnossxble Wenfler -an mm m our cram: Llhvary - -— Leo Tmsloy was a Russian rwovelwst -I and moval phflmopher med lur -A ms Ideas 01 nonviolenx reswslance m 5 We range 0, “and” - -M. -known for ms genevosxly to the '°'”"“‘ ‘”' "*°’“‘* W‘"' - -reading dwnmuie,—a|\ -‘L °““"“‘ opnmizedfarreadabIh(y—so -readerscan tho the fnrmat - -ms best knawn nuvckave “War and - -Peace" (1869),w>v(h msmy regarded as an em ‘”“”L"‘5"‘°"‘ W‘ 599 ""19 -vamer man a novel, and "Anna Kavemna" mm) “” '“"" - -Nxswark was admued m hiswne by Doxlayevxky, - -Chxkoxa Turgenev, and Flauben and Water by Tm EaSyREad super - -wgmiz wow and )ame§Joyc vlsxon -onshuqhtlhrmlghlhevadherenzr(owrme He -tamures the essenze af Ne wwlh an R5 mancnges, -hardsmps andmys The maepm poV\raya\ at -numemus thataclerx lrom an xpheves m We wands -u unparalleled reahsm Aime dassm‘ - - - -su+u27o3ro2ar1 - -||I||| H - -cuvmumeu .21mna - - - diff --git a/chapter13/1-wikiUnitTest.py b/chapter13/1-wikiUnitTest.py index c3e05dd..3c55704 100644 --- a/chapter13/1-wikiUnitTest.py +++ b/chapter13/1-wikiUnitTest.py @@ -18,9 +18,9 @@ def test_PageProperties(self): url = "http://en.wikipedia.org/wiki/Monty_Python" #Test the first 100 pages we encounter for i in range(1, 100): - bsObj = BeautifulSoup(urlopen(url)) + bsObj = BeautifulSoup(urlopen(url), 'html.parser') titles = self.titleMatchesURL() - self.assertEquals(titles[0], titles[1]) + self.assertEqual(titles[0], titles[1]) self.assertTrue(self.contentExists()) url = self.getNextLink() print("Done!") diff --git a/chapter13/2-wikiSeleniumTest.py b/chapter13/2-wikiSeleniumTest.py index cf3fe3d..166537a 100644 --- a/chapter13/2-wikiSeleniumTest.py +++ b/chapter13/2-wikiSeleniumTest.py @@ -4,5 +4,5 @@ driver = webdriver.PhantomJS(executable_path='/Users/ryan/Documents/pythonscraping/code/headless/phantomjs-1.9.8-macosx/bin/phantomjs') driver.get("http://en.wikipedia.org/wiki/Monty_Python") assert "Monty Python" in driver.title -print("Monty Python was not in the title") +print("Monty Python was in the title") driver.close() \ No newline at end of file diff --git a/chapter13/4-dragAndDrop.py b/chapter13/4-dragAndDrop.py index 8e7b360..7eebbc2 100644 --- a/chapter13/4-dragAndDrop.py +++ b/chapter13/4-dragAndDrop.py @@ -15,4 +15,6 @@ actions = ActionChains(driver) actions.drag_and_drop(element, target).perform() -print(driver.find_element_by_id("message").text) \ No newline at end of file +print(driver.find_element_by_id("message").text) + +driver.close() \ No newline at end of file diff --git a/chapter13/5-takeScreenshot.py b/chapter13/5-takeScreenshot.py index 76169c2..1956a07 100644 --- a/chapter13/5-takeScreenshot.py +++ b/chapter13/5-takeScreenshot.py @@ -9,4 +9,5 @@ driver.implicitly_wait(5) driver.get('http://www.pythonscraping.com/') -driver.get_screenshot_as_file('tmp/pythonscraping.png') \ No newline at end of file +driver.get_screenshot_as_file('tmp/pythonscraping.png') +driver.close() \ No newline at end of file diff --git a/chapter13/6-combinedTest.py b/chapter13/6-combinedTest.py index 011b0c8..77a2fc9 100644 --- a/chapter13/6-combinedTest.py +++ b/chapter13/6-combinedTest.py @@ -14,6 +14,7 @@ def setUp(self): driver.get(url) def tearDown(self): + driver.close() print("Tearing down the test") def test_drag(self): diff --git a/chapter13/ghostdriver.log b/chapter13/ghostdriver.log deleted file mode 100644 index 66ef052..0000000 --- a/chapter13/ghostdriver.log +++ /dev/null @@ -1,6 +0,0 @@ -PhantomJS is launching GhostDriver... -[INFO - 2016-01-10T08:45:04.240Z] GhostDriver - Main - running on port 58176 -[INFO - 2016-01-10T08:45:05.042Z] Session [71f20ae0-b776-11e5-afb7-fbdb40be72f0] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.8 Safari/534.34","webSecurityEnabled":true} -[INFO - 2016-01-10T08:45:05.042Z] Session [71f20ae0-b776-11e5-afb7-fbdb40be72f0] - page.customHeaders: - {} -[INFO - 2016-01-10T08:45:05.042Z] Session [71f20ae0-b776-11e5-afb7-fbdb40be72f0] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"1.9.8","driverName":"ghostdriver","driverVersion":"1.1.0","platform":"mac-unknown-32bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}} -[INFO - 2016-01-10T08:45:05.042Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: 71f20ae0-b776-11e5-afb7-fbdb40be72f0 diff --git a/chapter2/.DS_Store b/chapter2/.DS_Store deleted file mode 100644 index 3497ce0c34a2b818a836dc767453afbb34acd0e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%T5A85UkNXpkB}z^|(hbn&9)gBA9S9?guE3m5{7pcqDS$&+w!C0RIN6XC`Ek zCGlho=}x+9=h3y(MRtY(V5*Z&1tsj z6;K8Kn*#Ff?%*6X#CWDJzTZK+l@3}Q<)w@z|7Aa#}O_HIPSm0))-_G4|{R$wJqF<`efKFeJ~azc-h$IKx|XvU=yU8?a{4CB(-ANqNb$IPKi zhw+yWwzNmAkRnxZKp2q&MZvD4#=`POwu3<-QZ7jR z-unm$UWEtffp-bt{v>Lez%c@}Bh7x}*_m0-CwbRPM6A&d>qHeIvY-M>moO|4F)wsZ zRTjb+pATbo!#1SSb1k#*Kcg!eGu@s?>~I}^!dxzZ?ZFDI0K|?Xq>=z z7&Cpp^3o*c$uazsoJp*~~(yU|{Fbw=742b=~feLgrjugtR1B1K*084O7 zfh~R*M2@4;)i_d!83BRKqgXxu-zM(L=I_f(zoS3W7 zjD`Wjz$^o+>ailu|NYiXKuh{;ooh~M~ j^l>Z=aTIStrC`nx2GG?wQV0*k{0K-I%wQN;Dg(a&LK3l_ diff --git a/chapter3/scrapy/.DS_Store b/chapter3/scrapy/.DS_Store deleted file mode 100644 index e32c32e30f5cd03e202185c7f26929daabfda113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK&2G~`5S~o~*hB&&acFOQgF}Q8e%fQL5Gqx@AQ{mEMZv}vv9P?6~wyJ##Zy%^&5`sw%pdO+pX8Z zP*p)0mXmQWEM8IVc~}l3j$bI1E#okHnI_f1yZcn-Wtiqkp~-2SV3(8QG>=u)QN-339_=4R>f_m` z^NY`4zJAjy1cCnoZFd+KaEZZ2%{~N0o~isDwlBB~jzz10Rlq86bqer~#L?`qaYlC|0z(PL(5a}AJ4P&}65=S!njI}{*K@*0GXsCjp7{bsoFS(!3 zSQ|8S5d8QMJhR{ziqNy;_)>QV;TyE2Rlq8+s=$`1dUXCj`~CZWm1JvH0jt1&rGRMm zgMJT}#AoZ;;^?fE=x@-;s9$YxNx?uL#n_jQ;%#(on3ohF`i!+f%%ItefR@1)R)IgN Fz%QaKa^?U4 diff --git a/chapter3/scrapy/wikiSpider/.DS_Store b/chapter3/scrapy/wikiSpider/.DS_Store deleted file mode 100644 index efc9ae4f97950b0bb3405ed05f786dd069476e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%Z}496uq8yhNR^YBo@OiJ7!UhS{^e?qEe7XY!E@rf|LAosYO1u;q(2=J7LO0^x|k>4}p7AX>tMQ zDZnnzDWMLf6w?4BbWolhrHefJj_A+u@^mVB7uN7zfX69YX3C6$xviNMM0JoepdP)F z*`CwsGKcOVesPu-jWENP@O{jZuZAW6hoMaInHTf`$1}DC1JWis#D+kpLmStOZ+u0qD4;qb{d;L~p zQgg?LhxM9!^PoPNIB#t0>a`oU?}z;L+js9jeEjs~E7l2PINPON);NQ2s8r?}FKBk= z_p_8|r|6$?XB>l@qk#Txtm@`W$;`wkU=-L81;qK_!UcL73x)FNKp~$1z%rVpp)TGM zg5zrRG!_cc17nH`R8*#)7);U8?&>&CW1&#diRs4&)0vrmp)i>p4^LP?w{ZP%Ovw<6fg?>R|>Fl%WpNYBz?E8EKc0DF8mo>n20MBN(u^n9m|Ti eig)4C(C3N@(9>8bL<`LP5s)&N!YJ@h75D|=hM>a$ diff --git a/chapter3/scrapy/wikiSpider/articles.csv b/chapter3/scrapy/wikiSpider/articles.csv deleted file mode 100644 index 36bfa43..0000000 --- a/chapter3/scrapy/wikiSpider/articles.csv +++ /dev/null @@ -1,67 +0,0 @@ -title -Python (programming language) -Boo (programming language) -Cobra (programming language) -Falcon (programming language) -F Sharp (programming language) -Modula-3 -D (programming language) -Perl -Lisp (programming language) -Java (programming language) -Go (programming language) -Icon (programming language) -Haskell (programming language) -Dylan (programming language) -C (programming language) -FreeDOS -GNOME Foundation -Free Software Movement of India -C++ -Contributor License Agreement -Comparison of free and open-source software licenses -zlib License -WTFPL -Main Page -Microsoft Open Specification Promise -Fork (software development) -Microsoft Developer Network -ZDNet -Comparison of Visual Basic and Visual Basic .NET -Comparison of the Java and .NET platforms -Comparison of C Sharp and Visual Basic .NET -Memory safety -Compiled language -System programming language -Comparison of C Sharp and Java -Newsqueak -Modula -Limbo (programming language) -occam (programming language) -OS X -Apple Dylan -Runtime system -Human-readable medium -License compatibility -Free software license -Library (computing) -libpng -Code Project Open License -French Institute for Research in Computer Science and Automation -Centre national de la recherche scientifique -Commissariat à l'énergie atomique et aux énergies alternatives -MySQL -MariaDB -Bitbucket -OpenOffice.org -Jagged array -Visual Basic .NET -Visual Basic -Comparison of Object Pascal and C -NOS (software) -JOVIAL -Control Data Corporation -C++ -Bill Roscoe -List of concurrent and parallel programming languages -XC (programming language) diff --git a/chapter3/scrapy/wikiSpider/articles.json b/chapter3/scrapy/wikiSpider/articles.json deleted file mode 100644 index 68dd118..0000000 --- a/chapter3/scrapy/wikiSpider/articles.json +++ /dev/null @@ -1,66 +0,0 @@ -[{"title": "Python (programming language)"}, -{"title": "Dylan (programming language)"}, -{"title": "Icon (programming language)"}, -{"title": "Boo (programming language)"}, -{"title": "Modula-3"}, -{"title": "Lisp (programming language)"}, -{"title": "Java (programming language)"}, -{"title": "Perl"}, -{"title": "Haskell (programming language)"}, -{"title": "C (programming language)"}, -{"title": "ABC (programming language)"}, -{"title": "C++"}, -{"title": "Stackless Python"}, -{"title": "PyPy"}, -{"title": "Cython"}, -{"title": "Trusted Computing"}, -{"title": "ALGOL 68"}, -{"title": "Main Page"}, -{"title": "Microsoft Open Specification Promise"}, -{"title": "Fork (software development)"}, -{"title": "Open-source software security"}, -{"title": "Software patents and free software"}, -{"title": "Unified Extensible Firmware Interface"}, -{"title": "SCO\u2013Linux controversies"}, -{"title": "Delegate (CLI)"}, -{"title": "Assembly (CLI)"}, -{"title": "Virtual Execution System"}, -{"title": "Platform Invocation Services"}, -{"title": "Common Type System"}, -{"title": "List of CIL instructions"}, -{"title": "Code Access Security"}, -{"title": "Comparison of Visual Basic and Visual Basic .NET"}, -{"title": "Orwell (programming language)"}, -{"title": "ML (programming language)"}, -{"title": "Miranda (programming language)"}, -{"title": "Kent Recursive Calculator"}, -{"title": "ISWIM"}, -{"title": "Id (programming language)"}, -{"title": "Hope (programming language)"}, -{"title": "OpenMP"}, -{"title": "Edsger W. Dijkstra"}, -{"title": "Tony Hoare"}, -{"title": "Cornelis H. A. Koster"}, -{"title": "Orthogonality"}, -{"title": "Context-free grammar"}, -{"title": "Van Wijngaarden grammar"}, -{"title": "IFIP Working Group 2.1"}, -{"title": "Samba (software)"}, -{"title": "gummiboot (software)"}, -{"title": "rEFInd"}, -{"title": "Real-time clock"}, -{"title": "Non-volatile random-access memory"}, -{"title": "Globally unique identifier"}, -{"title": "BIOS boot partition"}, -{"title": "GNU GRUB"}, -{"title": "Exception handling"}, -{"title": "Instruction set"}, -{"title": "Microsoft Developer Network"}, -{"title": "Object type (object-oriented programming)"}, -{"title": "Memory management"}, -{"title": "Reference type"}, -{"title": "Value type"}, -{"title": "Inheritance (object-oriented programming)"}, -{"title": "Eager evaluation"}, -{"title": "Peter Landin"}, -{"title": "Hindley\u2013Milner type system"} \ No newline at end of file diff --git a/chapter3/scrapy/wikiSpider/scrapy.cfg b/chapter3/scrapy/wikiSpider/scrapy.cfg index 91cc886..75d6f89 100644 --- a/chapter3/scrapy/wikiSpider/scrapy.cfg +++ b/chapter3/scrapy/wikiSpider/scrapy.cfg @@ -1,7 +1,7 @@ # Automatically created by: scrapy startproject # # For more information about the [deploy] section see: -# http://doc.scrapy.org/en/latest/topics/scrapyd.html +# https://scrapyd.readthedocs.org/en/latest/deploy.html [settings] default = wikiSpider.settings diff --git a/chapter3/scrapy/wikiSpider/wiki.log b/chapter3/scrapy/wikiSpider/wiki.log deleted file mode 100644 index 999a381..0000000 --- a/chapter3/scrapy/wikiSpider/wiki.log +++ /dev/null @@ -1,18 +0,0 @@ -2015-03-09 00:11:36-0400 [scrapy] INFO: Scrapy 0.24.4 started (bot: wikiSpider) -2015-03-09 00:11:36-0400 [scrapy] INFO: Optional features available: ssl, http11 -2015-03-09 00:11:36-0400 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'wikiSpider.spiders', 'SPIDER_MODULES': ['wikiSpider.spiders'], 'LOG_FILE': 'wiki.log', 'BOT_NAME': 'wikiSpider'} -2015-03-09 00:11:36-0400 [scrapy] INFO: Enabled extensions: LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState -2015-03-09 00:11:37-0400 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats -2015-03-09 00:11:37-0400 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware -2015-03-09 00:11:37-0400 [scrapy] INFO: Enabled item pipelines: -2015-03-09 00:11:37-0400 [article] INFO: Spider opened -2015-03-09 00:11:37-0400 [article] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) -2015-03-09 00:11:37-0400 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 -2015-03-09 00:11:37-0400 [scrapy] DEBUG: Web service listening on 127.0.0.1:6080 -2015-03-09 00:11:37-0400 [article] DEBUG: Crawled (200) (referer: None) -2015-03-09 00:11:37-0400 [scrapy] INFO: Received SIGINT, shutting down gracefully. Send again to force -2015-03-09 00:11:37-0400 [article] INFO: Closing spider (shutdown) -2015-03-09 00:11:37-0400 [article] DEBUG: Filtered offsite request to 'en.wikibooks.org': -2015-03-09 00:11:37-0400 [article] DEBUG: Filtered offsite request to 'code.google.com': -2015-03-09 00:11:37-0400 [article] DEBUG: Filtered offsite request to 'en.wikiquote.org': -2015-03-09 00:11:37-0400 [scrapy] INFO: Received SIGINT twice, forcing unclean shutdown diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/.DS_Store b/chapter3/scrapy/wikiSpider/wikiSpider/.DS_Store deleted file mode 100644 index ffc15f70b424fe9aad105f7c3751fa81fdefe803..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO>fgc5S?vPV&e*e#G%}Lqlc(U_-K!fLO`mxAdKjNq7c_sW69W2>=0FHq+F2r zy!R&{_$&N?9{4Ze&F-d(lk|!Z>`1e3ygSdc`y%gViAXdDL7k{VL>8Q}bREqK<8k&S zThl!bP{?<9lv7H53J>C?Y|~*BFbe!_3h=jU(+;)Bqc;5V`%RDiIQ22gTf%3)%iK>*-(gm*0z{EU(or#M*jk<67CWZO3+Q+;m=h z-E`>XoqUirJN;Mu^sJM2eI36@)A%y(_%EYy*sk1ulqPv6O2WP*M?r{`qr)f((qS_l zBtdrMsm{YF$h-2Ty2G+;%WhY;Mx)(&z3Se3SRYs2(cWII>OR=5jmMSuwsq(3{r#tY zdiLStr_W!$e*2CU!UWD6X}2`a;0J<*mA~`)Nt`Ap7@4tV+5b0cH7wo(j2Q)t0!D#( z1$cjO;fxK96NPf?KqIdJz!JKpA?7~}%yBg~G)@#^1SS*}sHj3;F@&O{-_>~yjT426 zPC{Qkgsv>~4MoW6c)u&tNi-Ci)+k^UC@Qe79xHtQKfe0@UnH3)qkvK1pHe`ST3)M( zCF!$uX>okky6`t}HqM(UloT}jIFSO8xT8?9AYT%#_q3WM+JPW?p7V ae7qh|CkN12o80`A(wtN~kmbcd%m4r@w<^m3 diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/__init__.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eed87c91fedd87367f407ebf492de4cd0e6ac2f6 GIT binary patch literal 197 zcmWgR<>fLxXcNT%1dl-k3@`#24nSPY0whux7=kq!{Z=v*frJsnuOj{2yb}Fn{m|mn zqGJ8Z+}z@PeV6>?(%jU%l4AXUqWrAXWFR9wvn0MKwIIJ(zo4=tBR@~KIJqdXATuvr zKRF|@pd_`(SRX7>X{2ACnVlJ2keQNNgv^YO&&&gw5wBNJd5gm)H$SB`C)Ez*mSP}g F002y_H~Iho literal 0 HcmV?d00001 diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/items.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/items.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d826877953afa95712b25984faf791fc9d03330 GIT binary patch literal 418 zcmYk1y-ve05XUdg2PL#C6E6@6umo#`Ktdpv3aMhrVnxoWb%|qRyF!`E%kUh$MOLQ1 z0uz@6)Si5&pYP*;_UUw*ny*=Y9sqp9fkni(5T zA*W;ji!9nvJIqBF|Ba*vsWSqa$b(LhCNP9`1Y6>Gm>#u9ch*Z$;XF&)G3Rxmkn=X> zTJ9ntC& ia@WBm?C)7<6S}q06Ls~O{R;<5yYhH8eDh|!pZ^71!exg5 literal 0 HcmV?d00001 diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/settings.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/settings.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81f49a37678f6df580752b1ed6f8a4a1ba381421 GIT binary patch literal 320 zcmY+A!AiqG5QZmdjkUBzJb3logI&;T5iQA~V3X3MsC$VeyQHfoyXji;kGr-vOR_w^TSRu0F6Uvi$`?tvzK>FS8b=TRB0E|ouAOF& zS)R?sxezxUt*y* uO4KDOwi{)*z9wzbT#^03hl<=7SI3EJY;RggwtM3@?oWV$L*Soy!SOEyv0NVj literal 0 HcmV?d00001 diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/items.py b/chapter3/scrapy/wikiSpider/wikiSpider/items.py index 3c2687d..7e724b1 100644 --- a/chapter3/scrapy/wikiSpider/wikiSpider/items.py +++ b/chapter3/scrapy/wikiSpider/wikiSpider/items.py @@ -5,10 +5,10 @@ # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html -from scrapy import Item, Field +import scrapy -class Article(Item): +class Article(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() - title = Field() \ No newline at end of file + title = scrapy.Field() diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/items.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/items.pyc deleted file mode 100644 index d80c2094a29eb758ce850e1718117cd426c7e408..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmcgo!Ait15PfOZRaQKB&~NC;_yHm+B6v|~*MmJ+N;7J(X-ktua@IfgEILU=`~ru} zItL^_W}_WdJ&X`O9F31+$gE0coyMvcO7*41J+=_^L^hr zW5>LAt?}rwOUd_8tTVhYLS5dJ1sXsL&I^O&Qjf^QH?6nZreQ0>n_2&R;H@RrB$p?m<}CVsO!6w*|@ ziIf?b`6jdb?QXt=Y!-mb-!^wZ3SdlEOePE`Oxx85mRRMIC}E5e4QlMMT~veKUigm+ z=(C$(h5{v)^uzP3*Q=^tu~lDgabVqKkPVcqA+ z*AXwpGvBF(bFEQf%T?}}ZF)aq(kiRAvUwv2}Q!}96t-)A$dfPu7E4hSKuOErn>*%|9t-Mll;mR za0Sjv0T~r#G3PDW-a5EB-D@-Y6J1UFwGj^#CSfaPU)_pt=)qXeG$H1OZA4aR{v!}% K@ZbvksRG~TM^In@ diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__init__.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__init__.pyc deleted file mode 100644 index 78b171cb39ab9c66f8b58591fdc0ad0182a99ce8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmZSn%*(a1SO8xT8?9AYT%#_q3WM(l~q*y;b fJ~J<~BtBjbXaWb&c$?h(l+v73JCGxaftUdRyI?K+ diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/__init__.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1673fd677cbdb81509696e45296b96c6fa838165 GIT binary patch literal 205 zcmWgR<>fLxXcM)Nfq~&M5W@i@kmUfx#VkM~g@GYhlhJP_LlHUV5(_f( z()E)w5(`RFi;VTbB9%t^<(b);!3CKqsYS@lVz5ZDetdjp9?-0Ky@JYH95%W6DWy57 Lb|5zu12F>twdXs` literal 0 HcmV?d00001 diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/articleSpider.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/articleSpider.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f4c3436e0b1a5d238793c40302ba0214f61ca7a GIT binary patch literal 1140 zcmZ9L&2H2%5P-+|+ibQ=D?|&u6{(drNUTMiAO|Q2 z1Oy5L0t1L%H6S;kupqG7cN20O3I_tGeYYU*LE%E+0(q6#kT~!K-5g*9ZcGUJko4fx zcYoq7;2Uai#G}jnw9XR7mGx$pGoPs5b1t*EQHQUy^5W%{R5YG%eYu$<@hqY$ZD2k(YWI2;$R|Wy+`T)2CBEwlewH!Ww^8Zq~=x1qoT;l zG|Zziokc0z*?p?)D9@|Q#qCk+;EzVn?(g|y|G~C$W3+vU;tS=~5f?1XBrBA2UTKfB z7>n9G7D^Mx5e{*HLIQ>gpA5JrFvSF6F;E(?IW-!C2@+Ff!nFx^(L!*(#td4pkJG7d zA1?-!P99OouH?w)1dm*JXPL~|Rwnkglr6RHTU_6)?5jGG6V=1bx^Bv@c~(l_QkG!( zxpFxZbyW(cERD~H=<^l$9h`oBrbQ`fOy3H|1)Ud#sOXC-o)xT=f}Zed%3@T~Oop7* zm7sN#&W9rAQH_bD@g%AxTkjll{M@>-Ra~?%PHW@(!sdo08eKH5k(9gN27aKML%1k5$eR8czX247 BCj|fi literal 0 HcmV?d00001 diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.py b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.py index b5a88cb..f285b15 100644 --- a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.py +++ b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.py @@ -1,20 +1,18 @@ -from scrapy.contrib.spiders import CrawlSpider, Rule +from scrapy.spiders import CrawlSpider, Rule from wikiSpider.items import Article -from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor -from scrapy import log +from scrapy.linkextractors import LinkExtractor class ArticleSpider(CrawlSpider): - #log.start(logfile='log.txt', loglevel=log.CRITICAL) - name="article" - allowed_domains = ["en.wikipedia.org"] - start_urls = ["http://en.wikipedia.org/wiki/Python_%28programming_language%29"] - rules = [ - Rule(SgmlLinkExtractor(allow=('(/wiki/)((?!:).)*$'),), callback="parse_item", follow=True) - ] + name = "article" + allowed_domains = ["en.wikipedia.org"] + start_urls = ["http://en.wikipedia.org/wiki/Python_%28programming_language%29"] + rules = [ + Rule(LinkExtractor(allow=('(/wiki/)((?!:).)*$'),), callback="parse_item", follow=True) + ] - def parse_item(self, response): - item = Article() - title = response.xpath('//h1/text()')[0].extract() - print("Title is: "+title) - item['title'] = title - return item \ No newline at end of file + def parse_item(self, response): + item = Article() + title = response.xpath('//h1/text()')[0].extract() + print("Title is: "+title) + item['title'] = title + return item diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/articleSpider.pyc deleted file mode 100644 index 39fe60f72821bdbf59d767646de93a9558661657..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmc&zOK;RL5FRIKcDJaaa471Df?6rdVJ&*1RaG7Z!2v3iEeG}z+{Degbsn<4YFBDc z`}&`VIoFo`=o0^NhE50gIXOCTAXFeqa93~&wbaWa6S2jirVNz`|I zk^pz^7K#HS&h@xeg)}ZgJ)LQpFgop_cy64^e;V$fVO&=Ft*XynT{t6h*O<pISoxgy_c=7_5eTPB<;X`1E4-uCLHzbg>i9jNN7z(sRSUurEBv`-f!8HrWrw>J+ zupzE=oDA?rU#;k>wX2k(9-XT*)yhJNQDaKGkH)EU?Jnnko^kTz@8@pX)Y;bdlh!n) z5mlw?GSi|iXQGr_+dFOvuMk={=k_k{k}hnRBu^jg4oAaBn~wO+(c@U;XKoplRv0TY zM6un>T5#f z`FXHXpLkqG+P0~!^j1QYQpN;VCv1j0{=rIPxtWWazijeZC2MDS>zTE=5iL^6^QMs8 zYjaOwHz~hwt)EBB7Y*$kM(sSMR^P_ufdLz^bzI9VA)LO-EUQH&v&^%fWmQw)Jfli@ z=)_U9@1ZQRqN#+ct@pJKlVvlbZA#Oh5o+M;-?; z;vNK>;b8}TjZTQ)`6zE{XVmd%!C{Ig;2}BsENIdfbW#s(HvO;A_*5y8no?o^fe_#Ay{^Ce)G^yfvBp;E7yJOc$4>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0") + closeTag = "" + except AttributeError: #不打印标签 + pass + print(textElem.text) + print(closeTag) \ No newline at end of file diff --git a/chapter6/from urllib.request import urlopen b/chapter6/from urllib.request import urlopen deleted file mode 100644 index 52fe6b8..0000000 --- a/chapter6/from urllib.request import urlopen +++ /dev/null @@ -1,10 +0,0 @@ -from urllib.request import urlopen -from io import StringIO -import csv - -data = urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ascii', 'ignore') -dataFile = StringIO(data) -csvReader = csv.reader(dataFile) - -for row in csvReader: -print(row) \ No newline at end of file diff --git a/chapter6/readPdf.py b/chapter6/readPdf.py deleted file mode 100644 index c4ecee8..0000000 --- a/chapter6/readPdf.py +++ /dev/null @@ -1,24 +0,0 @@ -from pdfminer.pdfinterp import PDFResourceManager, process_pdf -from pdfminer.converter import TextConverter -from pdfminer.layout import LAParams -from io import StringIO -from io import open -from urllib.request import urlopen - -def readPDF(pdfFile): - rsrcmgr = PDFResourceManager() - retstr = StringIO() - laparams = LAParams() - device = TextConverter(rsrcmgr, retstr, laparams=laparams) - - process_pdf(rsrcmgr, device, pdfFile) - device.close() - - content = retstr.getvalue() - retstr.close() - return content - -pdfFile = urlopen("http://pythonscraping.com/pages/warandpeace/chapter1.pdf") -outputString = readPDF(pdfFile) -print(outputString) -pdfFile.close() diff --git a/chapter8/4-6DegreesFinder.py b/chapter8/4-6DegreesFinder.py index 7fc4263..63344b2 100644 --- a/chapter8/4-6DegreesFinder.py +++ b/chapter8/4-6DegreesFinder.py @@ -3,7 +3,7 @@ import pymysql -conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='mysql', charset='utf8') +conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password=None, db='mysql', charset='utf8') cur = conn.cursor() cur.execute("USE wikipedia") diff --git a/chapter8/7-NltkAnalysis.py b/chapter8/7-NltkAnalysis.py index 2f9f77c..03f86de 100644 --- a/chapter8/7-NltkAnalysis.py +++ b/chapter8/7-NltkAnalysis.py @@ -5,6 +5,6 @@ for sentence in sentences: if "google" in sentence.lower(): taggedWords = pos_tag(word_tokenize(sentence)) - for word in taggedWords: - if word[0].lower() == "google" and word[1] in nouns: - print(sentence) + for word in taggedWords: + if word[0].lower() == "google" and word[1] in nouns: + print(sentence) diff --git a/chapter9/1-fileSubmission.py b/chapter9/1-fileSubmission.py deleted file mode 100644 index 9a7e413..0000000 --- a/chapter9/1-fileSubmission.py +++ /dev/null @@ -1,5 +0,0 @@ -import requests - -files = {'uploadFile': open('../files/Python-logo.png', 'rb')} -r = requests.post("http://pythonscraping.com/pages/processing2.php", files=files) -print(r.text) \ No newline at end of file From 5c16b0c4391e8f1b30f1454d301917c4fb2dd16b Mon Sep 17 00:00:00 2001 From: Adam Yang Date: Sun, 24 Dec 2017 15:19:42 +0800 Subject: [PATCH 2/4] remove byte-compiled and output file --- .../__pycache__/__init__.cpython-35.pyc | Bin 197 -> 0 bytes .../wikiSpider/__pycache__/items.cpython-35.pyc | Bin 418 -> 0 bytes .../__pycache__/settings.cpython-35.pyc | Bin 320 -> 0 bytes .../spiders/__pycache__/__init__.cpython-35.pyc | Bin 205 -> 0 bytes .../__pycache__/articleSpider.cpython-35.pyc | Bin 1140 -> 0 bytes files/test.csv | 11 ----------- 6 files changed, 11 deletions(-) delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/__init__.cpython-35.pyc delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/items.cpython-35.pyc delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/settings.cpython-35.pyc delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/__init__.cpython-35.pyc delete mode 100644 chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/articleSpider.cpython-35.pyc delete mode 100644 files/test.csv diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/__init__.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/__init__.cpython-35.pyc deleted file mode 100644 index eed87c91fedd87367f407ebf492de4cd0e6ac2f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197 zcmWgR<>fLxXcNT%1dl-k3@`#24nSPY0whux7=kq!{Z=v*frJsnuOj{2yb}Fn{m|mn zqGJ8Z+}z@PeV6>?(%jU%l4AXUqWrAXWFR9wvn0MKwIIJ(zo4=tBR@~KIJqdXATuvr zKRF|@pd_`(SRX7>X{2ACnVlJ2keQNNgv^YO&&&gw5wBNJd5gm)H$SB`C)Ez*mSP}g F002y_H~Iho diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/items.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/items.cpython-35.pyc deleted file mode 100644 index 9d826877953afa95712b25984faf791fc9d03330..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmYk1y-ve05XUdg2PL#C6E6@6umo#`Ktdpv3aMhrVnxoWb%|qRyF!`E%kUh$MOLQ1 z0uz@6)Si5&pYP*;_UUw*ny*=Y9sqp9fkni(5T zA*W;ji!9nvJIqBF|Ba*vsWSqa$b(LhCNP9`1Y6>Gm>#u9ch*Z$;XF&)G3Rxmkn=X> zTJ9ntC& ia@WBm?C)7<6S}q06Ls~O{R;<5yYhH8eDh|!pZ^71!exg5 diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/settings.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/__pycache__/settings.cpython-35.pyc deleted file mode 100644 index 81f49a37678f6df580752b1ed6f8a4a1ba381421..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmY+A!AiqG5QZmdjkUBzJb3logI&;T5iQA~V3X3MsC$VeyQHfoyXji;kGr-vOR_w^TSRu0F6Uvi$`?tvzK>FS8b=TRB0E|ouAOF& zS)R?sxezxUt*y* uO4KDOwi{)*z9wzbT#^03hl<=7SI3EJY;RggwtM3@?oWV$L*Soy!SOEyv0NVj diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/__init__.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/__init__.cpython-35.pyc deleted file mode 100644 index 1673fd677cbdb81509696e45296b96c6fa838165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205 zcmWgR<>fLxXcM)Nfq~&M5W@i@kmUfx#VkM~g@GYhlhJP_LlHUV5(_f( z()E)w5(`RFi;VTbB9%t^<(b);!3CKqsYS@lVz5ZDetdjp9?-0Ky@JYH95%W6DWy57 Lb|5zu12F>twdXs` diff --git a/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/articleSpider.cpython-35.pyc b/chapter3/scrapy/wikiSpider/wikiSpider/spiders/__pycache__/articleSpider.cpython-35.pyc deleted file mode 100644 index 0f4c3436e0b1a5d238793c40302ba0214f61ca7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1140 zcmZ9L&2H2%5P-+|+ibQ=D?|&u6{(drNUTMiAO|Q2 z1Oy5L0t1L%H6S;kupqG7cN20O3I_tGeYYU*LE%E+0(q6#kT~!K-5g*9ZcGUJko4fx zcYoq7;2Uai#G}jnw9XR7mGx$pGoPs5b1t*EQHQUy^5W%{R5YG%eYu$<@hqY$ZD2k(YWI2;$R|Wy+`T)2CBEwlewH!Ww^8Zq~=x1qoT;l zG|Zziokc0z*?p?)D9@|Q#qCk+;EzVn?(g|y|G~C$W3+vU;tS=~5f?1XBrBA2UTKfB z7>n9G7D^Mx5e{*HLIQ>gpA5JrFvSF6F;E(?IW-!C2@+Ff!nFx^(L!*(#td4pkJG7d zA1?-!P99OouH?w)1dm*JXPL~|Rwnkglr6RHTU_6)?5jGG6V=1bx^Bv@c~(l_QkG!( zxpFxZbyW(cERD~H=<^l$9h`oBrbQ`fOy3H|1)Ud#sOXC-o)xT=f}Zed%3@T~Oop7* zm7sN#&W9rAQH_bD@g%AxTkjll{M@>-Ra~?%PHW@(!sdo08eKH5k(9gN27aKML%1k5$eR8czX247 BCj|fi diff --git a/files/test.csv b/files/test.csv deleted file mode 100644 index a0efbe1..0000000 --- a/files/test.csv +++ /dev/null @@ -1,11 +0,0 @@ -number,number plus 2,number times 2 -0,2,0 -1,3,2 -2,4,4 -3,5,6 -4,6,8 -5,7,10 -6,8,12 -7,9,14 -8,10,16 -9,11,18 From 6e0c49fd3e9a77308c939e3793fcd2c00d6fb1f8 Mon Sep 17 00:00:00 2001 From: Adam Yang Date: Sun, 24 Dec 2017 15:20:04 +0800 Subject: [PATCH 3/4] Add .gitignore --- .gitignore | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6cd11ba --- /dev/null +++ b/.gitignore @@ -0,0 +1,104 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +.static_storage/ +.media/ +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ \ No newline at end of file From e486c7f161799902b791f0245365667d73e56058 Mon Sep 17 00:00:00 2001 From: Adam Yang Date: Sun, 24 Dec 2017 15:22:14 +0800 Subject: [PATCH 4/4] Add .gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6cd11ba..9a14e8a 100644 --- a/.gitignore +++ b/.gitignore @@ -101,4 +101,6 @@ venv.bak/ /site # mypy -.mypy_cache/ \ No newline at end of file +.mypy_cache/ + +.DS_Store \ No newline at end of file