使用pycharm debug调试效率会比较慢,因为每次调试都需要向url发送请求,等返回信息,scrapy提供一种方便调试的功能,如下:

>>>(third_project) bigni@bigni:pachong$ scrapy shell http://blog.jobbole.com/112239/
>>> title = response.xpath('//*[@id="post-112239"]/div[1]/h1')
>>> title
[<Selector xpath='//*[@id="post-112239"]/div[1]/h1' data='<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>'>]
>>> title.extract()
['<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>']
>>> title = response.xpath('//*[@id="post-112239"]/div[1]/h1/text()')
>>> title
[<Selector xpath='//*[@id="post-112239"]/div[1]/h1/text()' data='谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征'>]

extract()方法可以取到select list里的date,text()方法可以取到内容。

In []: title2 = response.xpath("//*[@id='post-112239']/div[1]/h1").extract()

In []: title2
Out[]: ['<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>'] In []: title2 = response.xpath("//*[@id='post-112239']/div[1]/h1") In []: title2
Out[]: [<Selector xpath="//*[@id='post-112239']/div[1]/h1" data='<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>'>] In []: title2 = response.xpath("//*[@id='post-112239']/div[1]/h1/text()").extr
...: act() In []: title2
Out[]: ['谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征'] In []:

PS:在chrome里,按F12看到的代码是加载完所有插件后的,比如JS,如果通过通过根路径来定位要找的内容是容易出错的,因为xpath搜索的不会把js等生成的元素计算在内,这个可以通过鼠标右键查看源码来判断哪些是js生成的,然后过滤掉。

对于属性里有多个值的情况,比如class 里有多个值:

可以使用scrapy内置的contains方法:

In []: ret = response.xpath("//div[contains(@class,'post-112239')]")

In []: ret
Out[]: [<Selector xpath="//div[contains(@class,'post-112239')]" data='<div class="post-112239 post type-post s'>]

如果要爬取下面这个内容,可以这么操作:

In []: rest = response.xpath('//*[@id="post-112239"]/div[3]/div[4]/span[2]/tex
...: t()').extract()[0] In []: rest
Out[]: ' 8 收藏'

接着再用正则去掉别的信息,由于在scrapy shell中直接调用re模块会报错,那可以用ipython调试

In []: ret = re.match(r".*(\d+).*",' 8 收藏')

In []: ret.group()
Out[]: ''

最新文章

  1. Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
  2. 面试复习(C++)之直接插入排序
  3. Java 和C/C++的“语法”上的差异!
  4. 用js将从后台得到的时间戳(毫秒数)转换为想要的日期格式
  5. 任务太多,时间太少,GT凶猛,不留情面啊。。。
  6. JS练习 改变文本框状态
  7. HTML动画(难点)
  8. 中颖电子AD操作
  9. HTML/XML/XPATH基础
  10. 关于vue-router中点击浏览器前进后退地址栏路由变了但是页面没跳转
  11. 【Java】字节数组转换工具类
  12. canvas(四) Gradient- demo
  13. VCS双机+oracle 11gR2+ASM主机名修改
  14. IntelliJ IDEA2018.1、2017.3破解教程
  15. &lt;target&gt;.ID 和 &lt;source&gt;.ID 的属性冲突: DataType 属性不匹配
  16. numpy中的复合数组
  17. fish shell 下gopath的设置问题
  18. iOS-UIImage变为NSData并进行压缩
  19. MapReduce和yarn
  20. 设置网卡IP,还每次都挨个地址输入吗?批处理一下【转】

热门文章

  1. Git操作思维导图
  2. UML指南系列——活动图
  3. UML指南系列——用例图
  4. Aspose.Words转换为PDF的时候字体丢失的问题解决
  5. stat - 打印信息节点(inode)内容
  6. gradle笔记
  7. slect fd_set
  8. mac 命令行
  9. PHP实现上传视频的功能
  10. luoguP1290 欧几里德的游戏 [博弈论]