1.通过浏览器F12看到的HTML页面内容,和scrapy解析处理的不一样。
所有有时候,明明按照HTML中的元素定义xpath路径来获取内容,但一直返回空[]值。这种情况下就不能只看HTML里的代码形式,还有将response.text打印出来,找到的对应位置,查看xpath的正确定位。
2.xpath后面采用.extract()方法后,返回的对象是list,内容是str类型。不采用.extract()方法,返回的对象是<class 'scrapy.selector.unified.Selector'>
lawer_answers = response.xpath('//div[@class="ry_item "]/p[@class="tx"]')
lawer_answers = response.xpath('//div[@class="ry_item "]/p[@class="tx"]').extract()
3.想要获取<p class="tx">可以<a href="//www.64365.com/baike/qslh/" title="起诉离婚" target="_blank" style="color:#01af63;">起诉离婚</a></p>
标签p里面所有文本内容:可以起诉离婚
content = response.xpath('p/text()')
这种方式只能获取到部分内容:可以。p标签内部a标签里的内容没能成功获取到。
content = response.xpath('p/text()')[i].xpath('string(.)').extract()[0]
使用.xpath('string(.)').extract()[0]就可以获得全部内容:可以起诉离婚。
4.scrapy框架里完成页面的“更多”按钮的点击,使信息展示得更详细,更多。
点击“查看更多”问题等价于scrapy 如何爬取网页元素显示样式设置为不可见(即 style="display:none",class="ry_item none")标签下的内容。
不可见样式是指浏览器渲染方式不让人眼见,然而你爬虫取到的是网页的字符串。一样可以 xpath 取到的。
response.xpath('//div[@class="ry_item none"]')
response.xpath('//div[@class="ry_item"]')
两者都要定位到,则用模糊定位方法:response.xpath('//div[contains(@class,"ry_item ")]')
网友评论