赞
踩
网络爬虫是指在互联网上自动爬取网站内容信息的程序,也被称作网络蜘蛛或网络机器人。大型的爬虫程序被广泛应用于搜索引擎、数据挖掘等领域,个人用户或企业也可以利用爬虫收集对自身有价值的数据。
举一个简单的例子,假设你在本地新开了一家以外卖生意为主的餐馆,现在要给菜品定价,此时便可以开发一个爬虫程序,在美团、饿了么、百度外卖这些外卖网站爬取大量其他餐馆的菜品价格作为参考,以指导定价。
网络爬虫的执行流程可以总结为以下循环:
包括Engine、Scheduler、Downloader、Spider、Middleware、ItemPipeline
Request对象用来描述一个HTTP请求,常用属性有:
Response对象用来描述一个HTTP响应,包括三个子类:
HtmlResponse属性常用三个方法:
Xpath即XML路径语言,是用来确定xml文档中某部分位置的语言
/
选中文档的根
.
选中当前节点
..
选中当前节点的父节点
ELEMENT
选中子节点中所有ELEMENT元素节点
//ELEMENT
选中后代节点中所有ELEMENT元素节点
*
选中所有元素子节点
text()
选中所有文本子节点
@ATTR
选中名为ATTR的属性节点
@*
选中所有属性节点
[谓语]
谓语用来查找某个特定的节点或者包含某个特定值的节点
CSS即层叠样式表,选择器是一种用来确定HTML文档中某部分位置的语言,CSS选择器的语法比Xpath稍微简单一些,但功能不如Xpath强大。
*
选中所有元素
E
选中E元素
E1,E2
选中E1和E2元素
E1 E2
选中E1后代元素中的E2元素
E1>E2
选中E1子元素中的E2元素
E1+E2
选中E1兄弟元素中的E2元素
.CLASS
选中CLASS属性包含CLASS的元素
#ID
选中id属性为ID的元素
[ATTR]
选中包含ATTR属性的元素
[ATTR=VALUE]
选中包含ATTR属性且值为VALUE的元素
[ATTR~=VALUE]
选中包含ATTR属性且值包含VALUE的元素
E:nth-child(n)
或者 E:nth-last-child(n)
选中E元素,且该元素必须是其父元素的(或者倒数)第n个子元素
E:first-child
或者·E:last-child
选中E元素,且该元素必须是其父元素的(或者倒数)第一个子元素
E:empty
选中没有子元素的E元素
E::text
选中E元素的文本节点(Text Node)
对于提取到的网站中的多个信息字段,最容易想到是用Python的字典来维护这些零散的信息字段。由于字典
①不够直观、②容易写错、③不便传递给其他组件,在Scrapy中可以使用自定义的Item类封装数据。
Scrapy提供了Item和Field两个类,用户可以使用他们来自定义一个数据类,从而封装数据
为了自定义数据类,只需继承Item,并创建一系列Field对象的类属性即可。
①定义好的Item支持字典接口,因此Item在使用上和字典类似,
②并且Item内部会对字段名检测,当用户赋值没有意义字段时抛出错误。
③那么接下来使用Field元数据即可传递额外信息给处理数据的某个组件,告诉组件应该以怎样的方式处理数据。
ItemPipeline是处理数据的组件,一个ItemPipeline就是一个包含特定接口的类,通常只负责一种功能的数据处理,在一个项目中可以同时启用多个ItemPipeline,他们按指定次序级联起来,形成一条数据处理流水线。
ItemPipeline的几种典型应用
在创建一个Scrapy项目时,会自动生成一个pipelines.py文件,它用来放置用户自定义的ItemPipeline,在其中可以按需求选择各种常用的方法。
在Scrapy中,ItemPipeline是可选的组件,想要启用某个(或某些)ItemPipeline需要在配置文件settings.py中进行配置即可使用。
Scrapy提供了一个专门用于提取链接的类LinkExtractor,在提取大量链接或提取规则比较复杂时,使用LinkExtractor更加方便。
使用LinkExtractor对象提取页面中链接的流程如下:
隐层到输出层权重梯度计算:
∂ ε k ∂ w h j k = ∂ ε k ∂ s ( y j k ) ∂ S ( y j k ) ∂ y j k ∂ y j k ∂ w h j k \frac{\partial \varepsilon_{k}}{\partial w_{h j}^{k}}=\frac{\partial \varepsilon_{k}}{\partial s\left(y_{j}^{k}\right)} \frac{\partial \mathcal{S}\left(y_{j}^{k}\right)}{\partial y_{j}^{k}} \frac{\partial y_{j}^{k}}{\partial w_{h j}^{k}} ∂whjk∂εk=∂s(yjk)∂εk∂yjk∂S(yjk)∂whjk∂yjk那么其中
∂ ε k ∂ s ( y j k ) = − ( d j k − S ( y j k ) ) = − e j k \frac{\partial \varepsilon_{k}}{\partial s\left(y_{j}^{k}\right)}=-\left(d_{j}^{k}-\mathcal{S}\left(y_{j}^{k}\right)\right)=-e_{j}^{k} ∂s(yjk)∂εk=−(djk−S(yjk))=−ejk
∂ s ( y j k ) ∂ y j k = S ′ ( y j k ) = S ( y j k ) ( 1 − S ( y j k ) ) \frac{\partial s\left(y_{j}^{k}\right)}{\partial y_{j}^{k}}=\mathcal{S}^{\prime}\left(y_{j}^{k}\right)=\mathcal{S}\left(y_{j}^{k}\right)\left(1-\mathcal{S}\left(y_{j}^{k}\right)\right) ∂yjk∂s(yjk)=S′(yjk)=S(y
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。