1. 程式人生 > >爬蟲——scrapy入門

爬蟲——scrapy入門

參數傳遞 定義 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
 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 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字符串並返回listre(): 根據傳入的正則表達式對數據進行提取,返回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入門