Scrapy爬虫框架教程(三)-- 调试(Debugging)Spiders-阿里云开发者社区

开发者社区> sjdosw> 正文

Scrapy爬虫框架教程(三)-- 调试(Debugging)Spiders

简介:
+关注继续查看

前言

春节放假在老家没有网,所以最近没有更新。这周加班闲暇抽空赶紧来更新一篇。我们在写爬虫的时候经常需要修改xapth规则来获取所需的数据,而Scrapy的爬虫通常是在命令行中启动的,我们怎么去调试呢?下面我就为大家介绍两种我常用的方法。

工具和环境

  1. 语言:python 2.7
  2. IDE: Pycharm
  3. 浏览器:Chrome
  4. 爬虫框架: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[@class="grid_view"]/li')
for movie in movies:
item['ranking'] = movie.xpath(
'.//div[@class="pic"]/em/text()').extract()[0]
item['movie_name'] = movie.xpath(
'.//div[@class="hd"]/a/span[1]/text()').extract()[0]
item['score'] = movie.xpath(
'.//div[@class="star"]/span[@class="rating_num"]/text()'
).extract()[0]
item['score_num'] = movie.xpath(
'.//div[@class="star"]/span/text()').re(ur'(\d+)人评价')[0]
yield item
next_url = response.xpath('//span[@class="next"]/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好用。: )

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用IntelliJ IDEA开发SpringMVC网站(二)框架配置
原文:使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 摘要 讲解如何配置SpringMVC框架xml,以及如何在Tomcat中运行 目录[-] 文章已针对IDEA 15做了一定的更新,部分更新较为重要,请重新阅读文章并下载最新源码。
959 0
数据同步框架MS Sync Framework - IDE快速开发支持Local Database Cache
数据同步框架MS Sync Framework [术语、例子、参考资料、Tips] http://www.cnblogs.com/2018/archive/2011/02/22/1961654.html  数据同步框架MS Sync Framework-不同场景使用例子和简要分析 http://www.cnblogs.com/2018/archive/2011/02/23/1961657.html 以上两篇文章对框架的基础有了描述,通过IDE的提供Local Database Cache可以快速的实现一个常用的同步应用。
728 0
Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy
1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备的,预计在12月底,爬虫大概写到50篇案例的时刻,将会迎来一个新的内容,系统的数据分析博文,记得关注哦~ 36kr 让一部分人先看到未来,而你今天要做的事情确实要抓取它的过去。
9249 0
分享录制的正则表达式入门、高阶以及使用 .NET 实现网络爬虫视频教程
我发布的「正则表达式入门以及高阶教程」,欢迎学习。 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力; 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大量的实例加深对概念的理解; 实例操作是对概念最好的理解,也是学习新语言最有效的办法; 在课程中也穿插着大量软件开发的技巧和大家分享; 应该是把晦涩的正则表达式讲解的最生动的课程; 掌握了正则表达式后,您一定会觉得这是一门最值得掌握的语言。
886 0
intellij idea搭建ssh开发框架之绑定数据源
原文: intellij idea搭建ssh开发框架之绑定数据源 在intellij idea中绑定数据源并生成hibernate实体对象。
1231 0
PySide教程:第一个PySide应用
  PySide安装:请参考 http://www.meegoq.com/thread-1161-1-1.html   使用你已经安装了PySide,那么现在你应该已经拥有完整的PySide拷贝,并且可以使用Qt+Python的方式开发GUI应用程序。
1121 0
IntelliJ IDEA 12 创建Web项目 教程 超详细版
原文:IntelliJ IDEA 12 创建Web项目 教程 超详细版 IntelliJ IDEA 12 新版本发布 第一时间去官网看了下  黑色的主题 很给力 大体使用了下  对于一开始就是用eclipse的童鞋们 估计很难从eclipse中走出来 当然 我也很艰难的走在路上 ... 首先要说一点,在IntelliJ IDEA里面“new Project” 就相当于我们eclipse的“workspace”,而“new Module”才是创建一个工程。
1029 0
PySide教程:一个简单的点击按钮示例
  在这篇文章里,我们将为你展示如何使用PySide使用信号、槽机制。基本来说,这是Qt提供给你的允许一个图形控件与其他图形控件或者python代码进行通讯的特性。   我们将要创建一个应用,你点击应用中的按钮后将在Python终端里显示"Hello World"字样。
942 0
基于python的Scrapy爬虫框架实战
基于python的Scrapy爬虫框架实战 2018年7月19日笔记 1.伯乐在线 网站页面如下图所示: 网站页面.png 1.1 新建爬虫工程 命令:scrapy startproject BoleArticle 新建爬虫工程命令 命令:scrapy genspider article "blog.jobbole.com" 注意:运行此命令时必须在爬虫工程文件夹内,如下图路径所示。
1237 0
+关注
9
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载