BeautifulSoup 及 lxml 是 HTML 和 XML 的分析庫。Scrapy 則是 編寫爬蟲,爬取網(wǎng)頁并獲取數(shù)據(jù)的應(yīng)用框架(application framework)。
Scrapy 提供了內(nèi)置的機(jī)制來提取數(shù)據(jù)(叫做 選擇器(selectors))。 但如果您覺得使用更為方便,也可以使用 BeautifulSoup(或 lxml)。 總之,它們僅僅是分析庫,可以在任何 Python 代碼中被導(dǎo)入及使用。
換句話說,拿 Scrapy 與 BeautifulSoup (或 lxml) 比較就好像是拿 jinja2 與 Django 相比。
Scrapy 僅僅支持 Python 2.7。Python2.6 的支持從 Scrapy 0.20 開始被廢棄了。
不。但是 Python 3.3+的支持已經(jīng)在計(jì)劃中了?,F(xiàn)在,Scrapy 支持 Python 2.7。
參見
Scrapy 支持那些 Python 版本?。
也許吧,不過我們不喜歡這個(gè)詞。我們認(rèn)為 Django 是一個(gè)很好的開源項(xiàng)目,同時(shí)也是 一個(gè)很好的參考對象,所以我們把其作為 Scrapy 的啟發(fā)對象。
我們堅(jiān)信,如果有些事情已經(jīng)做得很好了,那就沒必要再重復(fù)制造輪子。這個(gè)想法,作為 開源項(xiàng)目及免費(fèi)軟件的基石之一,不僅僅針對軟件,也包括文檔,過程,政策等等。所以,與其自行解決每個(gè)問題,我們選擇從其他已經(jīng)很好地解決問題的項(xiàng)目中復(fù)制想法(copy idea) ,并把注意力放在真正需要解決的問題上。
如果 Scrapy 能啟發(fā)其他的項(xiàng)目,我們將為此而自豪。歡迎來抄(steal)我們!
是的。(從 Scrapy 0.8 開始)通過 HTTP 代理下載中間件對 HTTP 代理提供了支持。參考 HttpProxyMiddleware。
參考 Passing additional data to callback functions。
這是個(gè) Twisted bug,您需要安裝 pywin32。
參考 使用 FormRequest.from_response()方法模擬用戶登錄。
默認(rèn)情況下,Scrapy 使用 LIFO 隊(duì)列來存儲等待的請求。簡單的說,就是深度優(yōu)先順序。深度優(yōu)先對大多數(shù)情況下是更方便的。如果您想以 廣度優(yōu)先順序 進(jìn)行爬取,你可以設(shè)置以下的設(shè)定:
DEPTH_PRIORITY = 1
SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleFifoDiskQueue'
SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.FifoMemoryQueue'
參考調(diào)試內(nèi)存溢出。
另外,Python 自己也有內(nèi)存泄露,在 Leaks without leaks 有所描述。
參考上一個(gè)問題。
可以。參考 HttpAuthMiddleware.
嘗試通過覆蓋 DEFAULT_REQUEST_HEADERS 設(shè)置來修改默認(rèn)的 Accept-Language 請求頭。
參考例子。
是的。您可以使用 runspider 命令。例如,如果您有個(gè) spider 寫在 my_spider.py 文件中,您可以運(yùn)行:
scrapy runspider my_spider.py
詳情請參考 runspider 命令。
這些消息(以 DEBUG 所記錄)并不意味著有問題,所以你可以不修復(fù)它們。
這些消息由 Offsite Spider 中間件(Middleware)所拋出。 該(默認(rèn)啟用的)中間件篩選出了不屬于當(dāng)前 spider 的站點(diǎn)請求。
更多詳情請參見:OffsiteMiddleware。
參見 Scrapyd。
這取決于您的輸出有多大。參考 JsonItemExporter 文檔中的這個(gè)警告。
我能在信號處理器(signal handler)中返回(Twisted)引用么?
有些信號支持從處理器中返回引用,有些不行。參考內(nèi)置信號參考手冊(Built-in signals reference)來了解詳情。
999 是雅虎用來控制請求量所定義的返回值。 試著減慢爬取速度,將 spider 的下載延遲改為 2 或更高:
class MySpider(CrawlSpider):
name = 'myspider'
download_delay = 2
# [ ... rest of the spider code ... ]
或在 DOWNLOAD_DELAY 中設(shè)置項(xiàng)目的全局下載延遲。
pdb.set_trace() 來調(diào)試么?可以,但你也可以使用 Scrapy 終端。這能讓你快速分析(甚至修改) spider 處理返回的返回(response)。通常來說,比老舊的 pdb.set_trace()有用多了。
更多詳情請參考 在 spider 中啟動 shell 來查看 response。
dump 到 JSON 文件:
scrapy crawl myspider -o items.json
dump 到 CSV 文件:
scrapy crawl myspider -o items.csv
dump 到 XML 文件:
scrapy crawl myspider -o items.xml
更多詳情請參考 Feed exports
__VIEWSTATE 參數(shù)是什么?__VIEWSTATE 參數(shù)存在于 ASP.NET/VB.NET 建立的站點(diǎn)中。關(guān)于這個(gè)參數(shù)的作用請參考這篇文章。這里有一個(gè)爬取這種站點(diǎn)的樣例爬蟲。
使用 XPath 選擇器來分析大數(shù)據(jù)源可能會有問題。選擇器需要在內(nèi)存中對數(shù)據(jù)建立完整的 DOM 樹,這過程速度很慢且消耗大量內(nèi)存。
為了避免一次性讀取整個(gè)數(shù)據(jù)源,您可以使用 scrapy.utils.iterators 中的 xmliter 及 csviter 方法。 實(shí)際上,這也是 feed spider(參考 Spiders)中的處理方法。
是的,Scrapy 接收并保持服務(wù)器返回來的 cookies,在之后的請求會發(fā)送回去,就像正常的網(wǎng)頁瀏覽器做的那樣。
更多詳情請參考 Requests and Responses 及 CookiesMiddleware。
啟用 COOKIES_DEBUG 選項(xiàng)。
在回調(diào)函數(shù)中 raise CloseSpider 異常。 更多詳情請參見:CloseSpider。
參考避免被禁止(ban)。
spider 參數(shù)及設(shè)置(settings)都可以用來配置您的 spider。沒有什么強(qiáng)制的規(guī)則來限定要使用哪個(gè),但設(shè)置(settings)更適合那些一旦設(shè)置就不怎么會修改的參數(shù),而 spider 參數(shù)則意味著修改更為頻繁,在每次 spider 運(yùn)行都有修改,甚至是 spider 運(yùn)行所必須的元素 (例如,設(shè)置 spider 的起始 url)。
這里以例子來說明這個(gè)問題。假設(shè)您有一個(gè) spider 需要登錄某個(gè)網(wǎng)站來 爬取數(shù)據(jù),并且僅僅想爬取特定網(wǎng)站的特定部分(每次都不一定相同)。 在這個(gè)情況下,認(rèn)證的信息將寫在設(shè)置中,而爬取的特定部分的 url 將是 spider 參數(shù)。
也許您需要移除命名空間(namespace)。參見移除命名空間。