Scrapy爬虫框架复习(二)利用VScode断点调试注入代码的方式复习Scrapy选择器

阿里云2000元红包!本站用户参与享受九折优惠!

突然摸索出了利用Visual Studio Code进行断点调试的小技巧,也想试试来着

测试数据:test.html

<body>
    <ul>
        <li class="top">
            <div>li的div</div>
        </li>
        <li class="top">
            <div>
            <div>li的div的div</div>div>
            </div>
        </li>
        <li>
        <p>li的p</p>    
        </li>
        <li>
        <a>
        <div id="li_a_div">li的a的div</divid>    
        </a>    
        </li>
    </ul>
</body>

CSS选择器

  • 应用给定的CSS选择器时,返回 SelectorList 的一个实例,query 是一个包含CSS选择器的字符串
  • 该方法可以通过 response.css() 调用


    css选择器

利用断点调试+注入代码的方式,选择classs属性为”top”的li标签


VScode能够很好的展示数据结构

代码如下:

from scrapy import Selector
#with open("test.html", encoding='utf-8') as f:
with open("test.html") as f:
    text = f.read()
sel = Selector(text=text)
pass

断点调试步骤,如图所示:

  • 设置断点
  • 打开调试窗口
  • 启动调试
  • 打开Debug Console
  • 注入代码


Debug流程

其实更加准确的查找应该是:

sel.css('li.top')
  • 元素提取:
 sel.css("li > div”).extract()


提取父元素为li的所有div元素

  • 提取第一个元素:
>sel.css(‘li > div’).extract_first()


提取第一个元素

由于ID具有唯一性,更加推荐使用ID进行元素定位

XPath选择器

  • 寻找可以匹配 xpath query 的节点,并返回 SelectorList 的一个实例结果,单一化其所有 元素。
  • 列表元素也实现了 Selector 的接口。
  • query 是包含XPATH查询请求的字符串
  • 该方法可以通过 response.xpath() 调用

Xpath 使用路径表达式在 XML文档中选取节点。


XPath选择器

查找第三个li标签下的第一个p标签:

sel.xpath('//li')[2].xpath('./p')[0]


查找第三个li标签下的第一个p标签

  • 取文本:
sel.xpath('/html/body/ul/li/a/div/text()').extract_first()


查找a标签下的div标签的文本

  • 取属性
sel.xpath('/html/body/ul/li')[0].xpath('./@class').extract_first()


取属性

RE正则表达式

  • (.*)具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。
  • (.*?)则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。

PyQuery选择器

  • pyquery可以让你使用类似jQuery语法来对xml进行操作,pyquery语法尽可能跟jQuery语法相似
  • pyquery使用lxml库对xml和html进行快速的处理
  • pyquery这个库目前还不是一个可以跟JavaScript代码交互的库
  • 是对CSS选择器的更好的封装

调试代码:

from scrapy import Selector
from pyquery import PyQuery
#with open("test.html", encoding='utf-8') as f:
with open("test.html") as f:
    text = f.read()
jpy = PyQuery(text)
pass
  • 查找class=‘top’的元素的文本:
jpy('.top').text()
  • 查找class=‘top’的元素的class属性:
jpy('.top').attr('class')
  • 查找li标签下所有的文本
from scrapy import Selector
from pyquery import PyQuery
#with open("test.html", encoding='utf-8') as f:
with open("test.html") as f:
    text = f.read()
jpy = PyQuery(text)
items = jpy('li')
for i in items.items():
    print(i.text())
  • 查找li标签下所有的class属性
from scrapy import Selector
from pyquery import PyQuery
#with open("test.html", encoding='utf-8') as f:
with open("test.html") as f:
    text = f.read()
jpy = PyQuery(text)
items = jpy('li')
for i in items.items():
    print(i.attr('class'))

扩展阅读

  • 选择器(Selectors)
  • 正则表达式
  • 谷歌浏览器具有一款拓展插件叫“XPath Helper”,可以在浏览器页面直接写Xpath query,即时显示所写的Xpath选择到的结果
  • DC学院的爬虫

https://www.jianshu.com/p/eae979c1395c

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论