小甲魚第63課scrapy程序代碼

使用scrapy抓取一個網站一個需要四個步驟:

  1. 創建一個scrapy項目:scrapy startproject tutorial
  2. 定義Item容器
  3. 編寫爬蟲
  4. 存儲內容

這裡程序開發的步驟:

1.創建scrapy項目:

scrapy startproject tutorialn

該命令將會創建包含下列內容的 tutorial 目錄:

tutorial/n scrapy.cfgn tutorial/n __init__.pyn items.pyn pipelines.pyn settings.pyn spiders/n __init__.pyn ...n

這些文件分別是:

  • scrapy.cfg: 項目的配置文件
  • tutorial/: 該項目的python模塊。之後您將在此加入代碼。
  • tutorial/items.py: 項目中的item文件.
  • tutorial/pipelines.py: 項目中的pipelines文件.
  • tutorial/settings.py: 項目的設置文件.
  • tutorial/spiders/: 放置spider代碼的目錄.

2.定義Item容器:

items.py

# -*- coding: utf-8 -*-nn# Define here the models for your scraped itemsn#n# See documentation in:n# http://doc.scrapy.org/en/latest/topics/items.htmlnnimport scrapynnnclass DmozItem(scrapy.Item):n # define the fields for your item here like:n # name = scrapy.Field()n title = scrapy.Field()n link = scrapy.Field()n desc = scrapy.Field()n

3.編寫爬蟲:

tutorialspidersdmoz_spider.py

import scrapynnfrom tutorial.items import DmozItemnnclass DmozSpider(scrapy.Spider):n name = "dmoz"n allowed_domains = [dmoztools.net]n start_urls = [n "http://dmoztools.net/Computers/Programming/Languages/Python/Books/",n "http://dmoztools.net/Computers/Programming/Languages/Python/Resources/"n ]nn def parse(self,response):n # filename = response.url.split("/")[-2]n # with open(filename,wb) as f:n # f.write(response.body)n items = []n sel = scrapy.selector.Selector(response)n sites = sel.xpath(//div[@class="title-and-desc"])n for site in sites:n item = DmozItem()n item[title] = site.xpath(a/div/text()).extract()n item[link] = site.xpath(a/@href).extract()n item[desc] = site.xpath(div/text()).extract()n items.append(item)nn return itemsn

4.存儲內容

scrapy crawl dmoz -o items.json -t jsonn

5.用到的XPath一些知識

XPath表達式的例子和含義:

  • /html/head/title: 選擇HTML文檔中 <head> 標籤內的 <title> 元素
  • /html/head/title/text(): 選擇上面提到的 <title> 元素的文字
  • //td: 選擇所有的 <td> 元素
  • //div[@class="mine"]: 選擇所有具有 class="mine" 屬性的 div 元素

6.執行結果:

推薦閱讀:

Scrapy爬蟲框架教程(三)-- 調試(Debugging)Spiders
第十一章 Scrapy入門程序點評
scrapy做爬蟲時,導入Module的時候總顯示no module named ×××.items?
如何高效學習python的某一個包?

TAG:Python入门 | scrapy |