Windows 10家庭中文版,Python 3.6.3,Scrapy 1.5.0,shell
時隔一月,再次玩Scrapy項目,但願此次能夠玩的更進一步。服務器
本文展現使用在 Scrapy項目內、項目外scrapy shell命令抓取知乎首頁的初步狀況,重要的一點是,在項目內抓取時,沒有response可用。scrapy
在項目【外】執行抓取命令ide
scrapy shell https://www.zhihu.com網站
獲得結果(部分):由於知乎的反爬蟲功能,獲得了400錯誤,訪問失敗。spa
INFO: Overridden settings: {'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0}
[]
2018-08-20 09:11:54 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2018-08-20 09:11:54 [scrapy.core.engine] INFO: Spider opened
2018-08-20 09:11:59 [scrapy.core.engine] DEBUG: Crawled (400) <GET https://www.zhihu.com> (referer: None)對象
可用對象以下圖:存在response!blog
在項目【內】執行抓取命令ci
scrapy shell https://www.zhihu.comit
注意,項目使用scrapy startproject命令建立,已經在其settings.py中添加了USER_AGENT配置項。
獲得結果(部分):多了不少內容,還包括USER_AGENT設置。最後服務器返回200,表示頁面訪問成功。
INFO: Overridden settings: {'BOT_NAME': 'newssci', 'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0, 'NEWSPIDER_MODULE': 'newssci.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['newssci.spiders'], 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36-480'}
[]
2018-08-20 09:12:23 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2018-08-20 09:12:23 [scrapy.core.engine] INFO: Spider opened
2018-08-20 09:12:24 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.zhihu.com/robots.txt> (referer: None)
2018-08-20 09:12:24 [scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt: <GET https://www.zhihu.com>
可用對象以下圖:沒有response對象!還少了spider對象!
沒有response對象,感受什麼也作不了了,網頁也沒法分析了。
總結
看來,仍是須要到 項目外 使用scrapy shell命令來對網頁作分析纔是。不過,對於這種反爬蟲的網站,在命令中添加上USER_AGENT配置項,而後就能夠用response來作分析了。
項目外添加USER_AGENT配置項的命令以下:-s
scrapy shell -s USER_AGENT="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36-480" https://www.zhihu.com
結果以下:發生了一次重定向,因此有302。
INFO: Overridden settings: {'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0, 'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36-480'}
[scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://www.zhihu.com/signup?next=%2F> from <GET https://www.zhihu.com>
[scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.zhihu.com/signup?next=%2F> (referer: None)
發現了response對象可用:指明是針對其後的那個200網址的
[s] response <200 https://www.zhihu.com/signup?next=%2F>
使用response對象:獲取頁面title成功!
>>> response.xpath('//title/text()')
[<Selector xpath='//title/text()' data='知乎 - 發現更大的世界'>]