在上一篇文章的末尾,我們創建了一個scrapy框架的爬蟲項目test,現在來運行下一個簡單的爬蟲,看看scrapy爬取的過程是怎樣的。
一、爬蟲類編寫(spider.py)
from scrapy.spider import BaseSpider
class test(BaseSpider):
name = "test"
allowed_domains = ["yuedu.baidu.com"]
start_urls = ["http://yuedu.baidu.com/book/list/0?od=0&show=1&pn=0"]
def parse(self, response):
print response.url
二、爬網頁:運行scrapy項目
這裏選擇從命令行啓動運行項目的方式,一定要注意工程目錄結構,能夠運行scrapy命令的只有scrapy安裝的根目錄下。
cd到scrapy的根目錄,我的是D:\Python27\,然後運行scrapy命令:scrapy runspider test\test\spiders\spider.py。(或者直接運行工程項目的命令scrapy crawl test),可以看到爬蟲爬取的過程有一些debug信息輸出:
scrapy給爬蟲的start_urls屬性中的每個url創建了一個scrapy.http.Request對象,指定parse()方法爲回調函數。當這些Request被調度並執行,之後通過parse()返回scrapy.http.Response對象,返回給爬蟲。
三、取網頁:網頁解析
這裏用shell爬取網頁,cd到項目的根目錄test\下,在cmd中輸入:
scrapy shell http://yuedu.baidu.com
可以看到結果如下圖:
剛纔的整個過程中,shell載入url後獲得了響應,由本地變量response存儲響應結果。
來看下response的內容,輸入response.body可以查看response的body部分,即抓到的網頁內容:
要查看head部分,輸入response.headers:
四、用選擇器xpath提取網頁
之前提取網頁是用的正則,這裏選擇器xpath提供了更好的接口。shell有一個selector對象sel,可以根據返回的數據類型自動選擇最佳的解析方式(XML or HTML),無需再指明瞭。
1.抓取網頁標題,即<titie>標籤,在命令行裏輸入:response.selector.xpath(‘//title’)
或者:response.xpath(‘//title’)
2.抓取<title>下的<text>內容,命令sel.xpath(‘//title/text()’).extract()
先寫到這裏,下篇文章給出一個關於scrapy項目的完整實例。
原創文章,轉載請註明出處:http://blog.csdn.net/dianacody/article/details/39753933