疏窗

  • 首页
  • 生活
  • Java
  • Python
  • Golang
  • 其他
  • 归档

  • 搜索
leetcode jdk 生活 nas nosql 数据库 线程 爬虫 中间件

scrapy学习记录(选择器与调试工具)

发表于 2020-05-26 | 分类于 Python | 0 | 阅读次数 1322

scrapy调试工具:

在项目根目录命令行输入scrapy shell 请求地址进入调试工具
调试工具中可以使用css选择器提取想要的内容,方便编写代码

css选择器:

response.css("title") #提取网页中的title标签
#以我的网站为例返回如下灰色字体部分
>>> response.css('title')
[<Selector xpath='descendant-or-self::title' data='<title>Again river!</title>'>]
response.css('title').extract() #提取网页中的title标签并且去除多余元素只保留title标签及其内容列表数据
>>> response.css('title').extract()
['<title>Again river!</title>']
response.css('title').extract()[0]#通过列表取值的方式返回的是标签字符串数据
response.css('title').extract_first()  和上面的[0]的方式效果是一样的
>>> response.css('title').extract()[0]
'<title>Again river!</title>'
>>> response.css('title').extract_first()
'<title>Again river!</title>'
response.css('title::text').extract_first()#通过列表取值的方式返回的是标签内容字符串数据
>>> response.css('title::text').extract_first()
'Again river!'

xpath选择器

response.xpath('//title').get()#获取title标签
>>> response.xpath('//title').get()
'<title>Again river!</title>'
response.xpath('//title/text()').get()#获取title标签的文本多个结果使用getall()
>>> response.xpath('//title/text()').get()
'Again river!'

CSS高级用法

选择器示例示例说明CSS
#id#firstname选择所有id="firstname"的元素1
**选择所有元素2
elementp选择所有

元素

1
element,elementdiv,p选择所有
元素和

元素

1
element elementdiv p选择
元素内的所有

元素

1
element>elementdiv>p选择所有父级是
元素的

元素

2
element+elementdiv+p选择所有紧接着
元素之后的

元素

2
[attribute][target]选择所有带有target属性元素2
[attribute=value][target=-blank]选择所有使用target="-blank"的元素2
[attribute~=value][title~=flower]选择标题属性包含单词"flower"的所有元素2
[attribute|=language][lang|=en]选择一个lang属性的起始值="EN"的所有元素2
:linka:link选择所有未访问链接1
:visiteda:visited选择所有访问过的链接1
:activea:active选择活动链接1
:hovera:hover选择鼠标在链接上面时1
:focusinput:focus选择具有焦点的输入元素2
:first-letterp:first-letter选择每一个

元素的第一个字母

1
:first-linep:first-line选择每一个

元素的第一行

1
:first-childp:first-child指定只有当

元素是其父级的第一个子级的样式。

2
:beforep:before在每个

元素之前插入内容

2
:afterp:after在每个

元素之后插入内容

2
:lang(language)p:lang(it)选择一个lang属性的起始值="it"的所有

元素

2
element1~element2p~ul选择p元素之后的每一个ul元素3
[attribute^=value]a[src^="https"]选择每一个src属性的值以"https"开头的元素3
[attribute$=value]a[src$=".pdf"]选择每一个src属性的值以".pdf"结尾的元素3
[attribute*=value]a[src*="runoob"]选择每一个src属性的值包含子字符串"runoob"的元素3
:first-of-typep:first-of-type选择每个p元素是其父级的第一个p元素3
:last-of-typep:last-of-type选择每个p元素是其父级的最后一个p元素3
:only-of-typep:only-of-type选择每个p元素是其父级的唯一p元素3
:only-childp:only-child选择每个p元素是其父级的唯一子元素3
:nth-child(n)p:nth-child(2)选择每个p元素是其父级的第二个子元素3
:nth-last-child(n)p:nth-last-child(2)选择每个p元素的是其父级的第二个子元素,从最后一个子项计数3
:nth-of-type(n)p:nth-of-type(2)选择每个p元素是其父级的第二个p元素3
:nth-last-of-type(n)p:nth-last-of-type(2)选择每个p元素的是其父级的第二个p元素,从最后一个子项计数3
:last-childp:last-child选择每个p元素是其父级的最后一个子级。3
:root:root选择文档的根元素3
:emptyp:empty选择每个没有任何子级的p元素(包括文本节点)3
:target#news:target选择当前活动的#news元素(包含该锚名称的点击的URL)3
:enabledinput:enabled选择每一个已启用的输入元素3
:disabledinput:disabled选择每一个禁用的输入元素3
:checkedinput:checked选择每个选中的输入元素3
:not(selector):not(p)选择每个并非p元素的元素3
::selection::selection匹配元素中被用户选中或处于高亮状态的部分3
:out-of-range:out-of-range匹配值在指定区间之外的input元素3
:in-range:in-range匹配值在指定区间之内的input元素3
:read-write:read-write用于匹配可读及可写的元素3
:read-only:read-only用于匹配设置 "readonly"(只读) 属性的元素3
:optional:optional用于匹配可选的输入元素3
:required:required用于匹配设置了 "required" 属性的元素3
:valid:valid用于匹配输入值为合法的元素3
:invalid:invalid用于匹配输入值为非法的元素3

总结:

调试工具与选择器可以让我们更加方便的进行数据筛选得到想要的数据。
并且xpath与css选择器可以混用,更多使用请访问官网地址获取更详细的使用说明!

打赏作者
疯子虾夫 微信支付

微信支付

疯子虾夫 支付宝

支付宝

  • 本文作者: 疯子虾夫
  • 本文链接: https://hefengwei.com/archives/1590477601
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 爬虫
scrapy学习记录(入门)
scrapy学习记录(命令行工具)
  • 文章目录
  • 站点概览
疯子虾夫

疯子虾夫

24 日志
5 分类
9 标签
RSS
Creative Commons
© 2025 疯子虾夫
由 Halo 强力驱动
|
主题 - NexT.Mist v5.1.4
赣ICP备2024026242号

粤公网安备 44010602005909号