Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
scrapy-doc-zh
提交
8d9e83b1
S
scrapy-doc-zh
项目概览
OpenDocCN
/
scrapy-doc-zh
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
scrapy-doc-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8d9e83b1
编写于
7月 30, 2019
作者:
J
Jiez Tee
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
翻译 row 159 to row 260
上级
0e952a24
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
12 addition
and
12 deletion
+12
-12
docs/5.md
docs/5.md
+12
-12
未找到文件。
docs/5.md
浏览文件 @
8d9e83b1
...
...
@@ -158,7 +158,7 @@ class QuotesSpider(scrapy.Spider):
### 提取数据
学习如何使用
scrap
py提取数据的最佳方法是使用shell尝试选择器
[
Scrapy shell
](
../topics/shell.html#topics-shell
)
. 运行:
学习如何使用
Scra
py提取数据的最佳方法是使用shell尝试选择器
[
Scrapy shell
](
../topics/shell.html#topics-shell
)
. 运行:
```
py
scrapy
shell
'http://quotes.toscrape.com/page/1/'
...
...
@@ -167,7 +167,7 @@ scrapy shell 'http://quotes.toscrape.com/page/1/'
注解
在从命令行运行
scrappy
shell时,请记住始终将URL括在引号中,否则URL将包含参数(即。
`&`
字符)不起作用。
在从命令行运行
Scrapy
shell时,请记住始终将URL括在引号中,否则URL将包含参数(即。
`&`
字符)不起作用。
在Windows上,使用双引号:
...
...
@@ -197,7 +197,7 @@ scrapy shell "http://quotes.toscrape.com/page/1/"
```
使用shell,可以尝试使用
[
CSS
](
https://www.w3.org/TR/selectors
)
使用响应对象
:
您可以使用shell试试选择有
[
CSS
](
https://www.w3.org/TR/selectors
)
响应对象的元素
:
```
py
>>>
response
.
css
(
'title'
)
...
...
@@ -205,7 +205,7 @@ scrapy shell "http://quotes.toscrape.com/page/1/"
```
跑步的结果
`response.css('title')`
是否调用类似列表的对象
[
`SelectorList`
](
../topics/selectors.html#scrapy.selector.SelectorList
"scrapy.selector.SelectorList"
)
,表示
[
`Selector`
](
../topics/selectors.html#scrapy.selector.Selector
"scrapy.selector.Selector"
)
对象,这些对象环绕XML/HTML元素,并允许您运
行进一步的查询,以细化所选内容或提取数据。
运行
`response.css('title')`
的输出结果是个列表形似的对象,即为
[
`SelectorList`
](
../topics/selectors.html#scrapy.selector.SelectorList
"scrapy.selector.SelectorList"
)
。这包含一组封装了XML/HTML元素的
[
`Selector`
](
../topics/selectors.html#scrapy.selector.Selector
"scrapy.selector.Selector"
)
对象,并允许您进
行进一步的查询,以细化所选内容或提取数据。
要从以上标题中提取文本,可以执行以下操作:
...
...
@@ -215,7 +215,7 @@ scrapy shell "http://quotes.toscrape.com/page/1/"
```
这
里有两件事需要注意:一是我们已经添加了
`::text`
对于CSS查询,意味着我们只想直接选择内部的文本元素
`<title>`
元素。如果我们不指定
`::text`
,我们将得到完整的标题元素,包括它的标记
:
这
有两件事需要注意:一是我们添加
`::text`
以查询CSS,意味着我们只要直接选择
`<title>`
元素内的文本元素。如果我们不指定
`::text`
,我们将得到包含标签的完整title元素
:
```
py
>>>
response
.
css
(
'title'
).
getall
()
...
...
@@ -223,7 +223,7 @@ scrapy shell "http://quotes.toscrape.com/page/1/"
```
另
一件事是呼叫的结果
`.getall()`
是一个列表:一个选择器可能返回多个结果,所以我们提取所有结果。当您知道您只想得到第一个结果时,就像在本例中一样
,您可以这样做:
另
外,调用
`.getall()`
的结果是个列表:一个选择器有可能回返回多个结果,所以我们提取所有结果。假如您只想得到第一个结果的话
,您可以这样做:
```
py
>>>
response
.
css
(
'title::text'
).
get
()
...
...
@@ -231,7 +231,7 @@ scrapy shell "http://quotes.toscrape.com/page/1/"
```
作为替代方案,您可以
写:
您也可以这样
写:
```
py
>>>
response
.
css
(
'title::text'
)[
0
].
get
()
...
...
@@ -239,11 +239,11 @@ scrapy shell "http://quotes.toscrape.com/page/1/"
```
然而,使用
`.get()`
直接在A上
[
`SelectorList`
](
../topics/selectors.html#scrapy.selector.SelectorList
"scrapy.selector.SelectorList"
)
实例避免了
`IndexError`
回报
`None`
当它找不到任何与所选内容匹配的元素时
。
不过,当
[
`SelectorList`
](
../topics/selectors.html#scrapy.selector.SelectorList
"scrapy.selector.SelectorList"
)
实例找不到任何符合的元素时,直接使用
`.get()`
可避免
`IndexError`
和返回
`None`
。
这里有一个教训:对于大多数抓取代码,您希望它能够对由于在页面上找不到的东西而导致的错误具有弹性,这样即使某些部分无法抓取,您至少可以
**some**
数据。
课堂小知识:对于大多数的抓取代码,当有找不到东西的时候,您会希望它能处理错误。这样的话即使抓取失败了,您至少可以得到
**一些些**
数据。
除
此之外
[
`getall()`
](
../topics/selectors.html#scrapy.selector.SelectorList.getall
"scrapy.selector.SelectorList.getall"
)
和
[
`get()`
](
../topics/selectors.html#scrapy.selector.SelectorList.get
"scrapy.selector.SelectorList.get"
)
方法,也可以使用
[
`re()`
](
../topics/selectors.html#scrapy.selector.SelectorList.re
"scrapy.selector.SelectorList.re"
)
提取方法
[
regular expressions
](
https://docs.python.org/3/library/re.html
)
:
:
除
了
[
`getall()`
](
../topics/selectors.html#scrapy.selector.SelectorList.getall
"scrapy.selector.SelectorList.getall"
)
和
[
`get()`
](
../topics/selectors.html#scrapy.selector.SelectorList.get
"scrapy.selector.SelectorList.get"
)
方法,您也可以以
[
`re()`
](
../topics/selectors.html#scrapy.selector.SelectorList.re
"scrapy.selector.SelectorList.re"
)
方法使用
[
正则表达式
](
https://docs.python.org/zh-cn/3/library/re.html
)
提取数据
:
```
py
>>>
response
.
css
(
'title::text'
).
re
(
r
'Quotes.*'
)
...
...
@@ -255,9 +255,9 @@ scrapy shell "http://quotes.toscrape.com/page/1/"
```
为了找到合适的CSS选择器,您
可能会发现在Web浏览器的shell中使用
`view(response)`
. 您可以使用浏览器开发人员工具检查HTML并找到一个选择器
(请参见关于
[
使用浏览器的开发人员工具进行抓取
](
../topics/developer-tools.html#topics-developer-tools
)
)
为了找到合适的CSS选择器,您
也许会发现在您的浏览器里的shell使用
`view(response)`
打开相应页面会很有用 . 您可以使用浏览器内的带有选择器的开发者工具查看HTML
(请参见关于
[
使用浏览器的开发人员工具进行抓取
](
../topics/developer-tools.html#topics-developer-tools
)
)
[
Selector Gadget
](
http://selectorgadget.com/
)
也是一个很好的工具,可以快速找到视觉上选中的元素的CSS选择器,它可以在许多浏览器中使用
。
[
Selector Gadget
](
http://selectorgadget.com/
)
工具可以快速找出CSS元素,其可支持多种浏览器
。
#### xpath:简介
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录