用Scrapy shell调试xpath
2017-12-20 17:42
507 查看
首先还是安利一下国内翻译的scrapy文档,虽然最新的翻译版本是1.0版,scrapy已经出到1.3版,但是这份文档仍然非常好用,只是有些版本差异带来的小坑。
在命令行键入
进入scrapy shell终端,如果你安装了IPython,它会以IPython启动。
此时会打出一些Scrapy的启动信息和使用方法。
使用fetch()获取网页
2
3
此时网页已被保存在response对象里,当然也可以付给一个变量,既然是用于调试XPath,感觉没必要保存。
使用xpath匹配网页元素
xpath的使用方式与在Scrapy项目里别无二致,要注意的是在Scrapy1.2版本之后,不再需要自己声明selector选择器,直接使用response.xpath()或response.css(),scrapy shell中也是如此。
2
scrapy 1.2版本以前,fetch()回的response和selector是分开的,写法如下:
也可以分层调试
2
3
4
view()
在scrapy shell中键入
这条命令会调用本地浏览器显示你刚刚请求的网页,值得注意的是:
在本机的浏览器打开给定的response。 其会在response的body中添加一个 tag ,使得外部链接(例如图片及css)能正确显示。 注意,该操作会在本地创建一个临时文件,且该文件不会被自动删除。 ——中文文档
当你感觉xpath写的没问题可是就是匹配不到的时候,不妨看一下你到底下载到了啥玩意儿:-)。
17年4月12日补:
2
3
4
5
6
众(gang)所(bai)周(du)知(de),500是服务器内部错误的状态码,但是直觉告诉我应该是scrapy shell的User-Agent是“Scrapy+版本号”,所以才被服务器拒绝的。
用以下命令配置User-Agent并启动scrapy shell:
然后在fetch()知乎的首页,发现已经200了。
2
3
4
那么如何在scrapy shell中给请求配置请求头呢?如下:
2
3
4
5
参考资料:http://stackoverflow.com/questions/37010524/set-headers-for-scrapy-shell-request
版权声明:独立博客http://www.kongtianyi.cn,欢迎转载,转载请注明出处。
在命令行键入
scrapy shell1
进入scrapy shell终端,如果你安装了IPython,它会以IPython启动。
此时会打出一些Scrapy的启动信息和使用方法。
使用fetch()获取网页
In [2]: fetch('https://www.baidu.com') 2017-01-17 10:32:55 [scrapy.core.engine] INFO: Spider opened 2017-01-17 10:32:55 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.baidu.com> (referer: None)1
2
3
此时网页已被保存在response对象里,当然也可以付给一个变量,既然是用于调试XPath,感觉没必要保存。
使用xpath匹配网页元素
xpath的使用方式与在Scrapy项目里别无二致,要注意的是在Scrapy1.2版本之后,不再需要自己声明selector选择器,直接使用response.xpath()或response.css(),scrapy shell中也是如此。
In [2]: response.xpath('//*[@id="lg"]').extract() Out[2]: ['<div id="lg"> <img hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270" height="129"> </div>']1
2
scrapy 1.2版本以前,fetch()回的response和selector是分开的,写法如下:
sel.xpath('//*[@id="lg"]')1
也可以分层调试
In [3]: a = response.xpath('//*[@id="lg"]') In [4]: a.xpath('./img').extract() Out[4]: ['<img hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270" height="129">']1
2
3
4
view()
在scrapy shell中键入
view(response)1
这条命令会调用本地浏览器显示你刚刚请求的网页,值得注意的是:
在本机的浏览器打开给定的response。 其会在response的body中添加一个 tag ,使得外部链接(例如图片及css)能正确显示。 注意,该操作会在本地创建一个临时文件,且该文件不会被自动删除。 ——中文文档
当你感觉xpath写的没问题可是就是匹配不到的时候,不妨看一下你到底下载到了啥玩意儿:-)。
17年4月12日补:
添加UserAgent和请求头的方法
在用scrapy shell 调试知乎时出现:fetch('http://www.zhihu.com') 2017-04-12 22:33:09 [scrapy.core.engine] INFO: Spider opened 2017-04-12 22:33:19 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET http://www.zhihu.com> (failed 1 times): 500 Internal Server Error 2017-04-12 22:33:24 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET http://www.zhihu.com> (failed 2 times): 500 Internal Server Error 2017-04-12 22:33:29 [scrapy.downloadermiddlewares.retry] DEBUG: Gave up retrying <GET http://www.zhihu.com> (failed 3 times): 500 Internal Server Error 2017-04-12 22:33:29 [scrapy.core.engine] DEBUG: Crawled (500) <GET http://www.zhihu.com> (referer: None)1
2
3
4
5
6
众(gang)所(bai)周(du)知(de),500是服务器内部错误的状态码,但是直觉告诉我应该是scrapy shell的User-Agent是“Scrapy+版本号”,所以才被服务器拒绝的。
用以下命令配置User-Agent并启动scrapy shell:
scrapy shell -s USER_AGENT='Mozilla/5.0'1
然后在fetch()知乎的首页,发现已经200了。
fetch('http://www.zhihu.com') 2017-04-12 22:41:11 [scrapy.core.engine] INFO: Spider opened 2017-04-12 22:41:11 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://www.zhihu.com/> from <GET http://www.zhihu.com> 2017-04-12 22:41:12 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.zhihu.com/> (referer: None)1
2
3
4
那么如何在scrapy shell中给请求配置请求头呢?如下:
$ scrapy shell ... >>> from scrapy import Request >>> req = Request('yoururl.com', headers={"header1":"value1"}) >>> fetch(req)1
2
3
4
5
参考资料:http://stackoverflow.com/questions/37010524/set-headers-for-scrapy-shell-request
版权声明:独立博客http://www.kongtianyi.cn,欢迎转载,转载请注明出处。
相关文章推荐
- 用Scrapy shell调试xpath
- scrapy shell 调试返回403 返回为[]
- Scrapy shell调试返回403错误
- 爬虫系列3:scrapy技术进阶(xpath、rules、shell等)
- 安装ipython,使用scrapy shell来验证xpath选择的结果 | How to install iPython and how does it work with Scrapy Shell
- Scrapy爬虫入门教程八 交互式 shell 方便调试
- 通过scrapy shell url利用xpath解析网页(为避免反爬虫封掉IP)
- Scrapy shell调试返回403错误
- 在Scrapy中启动shell来调试
- scrapy shell 可以用于测试xpath的响应
- shell脚本调试技术(转)
- [shell-基础] 调试脚本
- 关于shell 的一些调试问题
- 用内置变量调试shell脚本的方法
- ubuntu下调试android手机,并进入手机shell终端
- [置顶]Shell调试技术总结(二)
- Shell调试
- 如何在 Linux 中启用 Shell 脚本的调试模式
- windows下PyCharm运行和调试scrapy
- linux下串口调试(只用shell)