Scrapy爬蟲框架教程(三)-- 調試(Debugging)Spiders
前言
春節放假在老家沒有網,所以最近沒有更新。這周加班閑暇抽空趕緊來更新一篇。我們在寫爬蟲的時候經常需要修改xapth規則來獲取所需的數據,而Scrapy的爬蟲通常是在命令行中啟動的,我們怎麼去調試呢?下麵我就為大家介紹兩種我常用的方法。
工具和環境
- 語言:python 2.7
- IDE: Pycharm
- 瀏覽器:Chrome
- 爬蟲框架:Scrapy 1.2.1
正文
方法1
通過 scrapy.shell.inspect_response 函數來實現。以上一篇教程的爬蟲為例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# -*- coding: utf-8 -*-
# @Time : 2017/1/7 17:04
# @Author : woodenrobot
from scrapy import Request
from scrapy.spiders import Spider
from scrapyspider.items import DoubanMovieItem
class DoubanMovieTop250Spider(Spider):
name = 'douban_movie_top250'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/'
'537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safar'
'i/537.36',
}
def start_requests(self):
url = 'https://movie.douban.com/top250'
yield Request(url, headers=self.headers)
def parse(self, response):
# 命令行調試代碼
from scrapy.shell import inspect_response
inspect_response(response, self)
item = DoubanMovieItem()
movies = response.xpath('//ol[@]/li')
for movie in movies:
item['ranking'] = movie.xpath(
'.//div[@]/em/text()').extract()[0]
item['movie_name'] = movie.xpath(
'.//div[@]/a/span[1]/text()').extract()[0]
item['score'] = movie.xpath(
'.//div[@]/span[@]/text()'
).extract()[0]
item['score_num'] = movie.xpath(
'.//div[@]/span/text()').re(ur'(\d+)人評價')[0]
yield item
next_url = response.xpath('//span[@]/a/@href').extract()
if next_url:
next_url = 'https://movie.douban.com/top250' + next_url[0]
yield Request(next_url, headers=self.headers)
|
我們在下載完網頁源碼進行解析前可以插入上述兩句代碼,在命令行運行爬蟲出現以下效果:
此時我們就可以在命令行中使用xpath規則對response進行操作提取相應的信息:
有時候下載下來的網頁結構和瀏覽器中看到的不一樣,我們可以利用view(response)
將爬蟲下載到的網頁源碼在瀏覽器中打開:
在命令行輸入view(response)
後默認瀏覽器會自動打開下載到的網頁源碼。
雖然scrapy自己提供了這個方式讓我們調試自己的爬蟲,但是這個方式有很大的局限性。如果能利用pycharm的Debug功能進行調試就太好了。下麵我就為大家介紹這麼用pycharm調試自己的爬蟲。
方法2
首先在setting.py同級目錄下創建run.py文件。
寫入以下代碼:
1
2
3
4
5
6
7
8
9
10
11
|
# -*- coding: utf-8 -*-
# @Time : 2017/1/1 17:51
# @Author : woodenrobot
from scrapy import cmdline
name = 'douban_movie_top250'
cmd = 'scrapy crawl {0}'.format(name)
cmdline.execute(cmd.split())
|
其中name
參數為spider的name。
接著在spider文件中設置斷點。
返回run.py
文件中右鍵選擇Debug。
最後程序就會在斷點處暫停,我們就可以查看相應的內容從而進行調試
結語
兩種方法適合不同的場景,不過一般情況下肯定是方法2好用。: )
最後更新:2017-04-14 09:00:45