爬蟲——scrapy入門
阿新 • • 發佈:2018-09-29
參數傳遞 定義 unicode ace line 目錄 創建項目 列表 spl
scrapy
- 安裝scrapy
pip install scrapy
windows可能安裝失敗,需要先安裝c++庫或twisted,
pip install twisted
- 創建項目
scrapy startproject tutorial
該命令將會創建包含下列內容的 tutorial 目錄:
tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ... scrapy.cfg: 項目的配置文件 tutorial/: 該項目的python模塊。之後您將在此加入代碼。 tutorial/items.py: 項目中的item文件. tutorial/pipelines.py: 項目中的pipelines文件. tutorial/settings.py: 項目的設置文件. tutorial/spiders/: 放置spider代碼的目錄.
- 編寫第一個爬蟲
為了創建一個Spider,您必須繼承 scrapy.Spider 類,定義以下三個屬性
scrapy genspider dmoz dmoz.com 終端命令可以直接完成這步操作
- 屬性
- name: 用於區別Spider。 該名字必須是唯一的,您不可以為不同的Spider設定相同的名字
- start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 後續的URL則從初始的URL獲取到的數據中提取
- parse() 是spider的一個方法。 被調用時,每個初始URL完成下載後生成的
- Response 對象將會作為唯一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的 Request 對象
1 import scrapy 23 class DmozSpider(scrapy.Spider): 4 name = "dmoz" 5 allowed_domains = ["dmoz.org"] 6 start_urls = [ 7 "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 8 "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" 9 ] 10 11 def parse(self, response): 12 filename = response.url.split("/")[-2] 13 with open(filename, ‘wb‘) as f: 14 f.write(response.body)
- 爬取
scrapy crawl dmoz
過程:Scrapy為Spider的 start_urls 屬性中的每個URL創建了 scrapy.Request 對象,並將 parse 方法作為回調函數(callback)賦值給了Request;Request對象經過調度,執行生成 scrapy.http.Response 對象並送回給spider parse() 方法。
xpath(): 傳入xpath表達式,返回該表達式所對應的所有節點的selector list列表 。
css(): 傳入CSS表達式,返回該表達式所對應的所有節點的selector list列表.
extract(): 序列化該節點為unicode字符串並返回list。
re(): 根據傳入的正則表達式對數據進行提取,返回unicode字符串list列表。
- scrapy shell
scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"
- response
- response.body:包體
- response.headers:包頭
- response.xpath():xpath選擇器
- response.css():css選擇器
1 import scrapy 2 3 class DmozSpider(scrapy.Spider): 4 name = "dmoz" 5 allowed_domains = ["dmoz.org"] 6 start_urls = [ 7 "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 8 "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" 9 ] 10 11 def parse(self, response): 12 for sel in response.xpath(‘//ul/li‘): 13 title = sel.xpath(‘a/text()‘).extract() 14 link = sel.xpath(‘a/@href‘).extract() 15 desc = sel.xpath(‘text()‘).extract() 16 print title, link, desc
請使用手機"掃一掃"x
爬蟲——scrapy入門