爬虫入门教程-Spider

Spider
爬虫是定义如何抓取某个网站(或一组网站)的类,包括如何执行抓取(即关注链接)以及如何从其网页中提取结构化数据(即抓取项目)。换句话说,Spider是您定义用于为特定网站(或在某些情况下,一组网站)抓取和解析网页的自定义行为的位置。

对于爬虫,循环经历这样的事情:

您首先生成用于抓取第一个URL的初始请求,然后指定要使用从这些请求下载的响应调用的回调函数。

第一个执行的请求通过调用 start_requests()(默认情况下)Request为在start_urls和中指定的URL生成的parse方法获取, 并且该方法作为请求的回调函数。

在回调函数中,您将解析响应(网页),并返回带有提取的数据,Item对象, Request对象或这些对象的可迭代的对象。这些请求还将包含回调(可能是相同的),然后由Scrapy下载,然后由指定的回调处理它们的响应。

在回调函数中,您通常使用选择器来解析页面内容 (但您也可以使用BeautifulSoup,lxml或您喜欢的任何机制),并使用解析的数据生成项目。

最后,从爬虫返回的项目通常将持久存储到数据库(在某些项目管道中)或使用Feed导出写入文件。

即使这个循环(或多或少)适用于任何种类的爬虫,有不同种类的默认爬虫捆绑到Scrapy中用于不同的目的。我们将在这里谈论这些类型。

class scrapy.spiders.Spider
这是最简单的爬虫,每个其他爬虫必须继承的爬虫(包括与Scrapy捆绑在一起的爬虫,以及你自己写的爬虫)。它不提供任何特殊功能。它只是提供了一个默认start_requests()实现,它从start_urlsspider属性发送请求,并parse 为每个结果响应调用spider的方法。

name
定义此爬虫名称的字符串。爬虫名称是爬虫如何由Scrapy定位(和实例化),因此它必须是唯一的。但是,没有什么能阻止你实例化同一个爬虫的多个实例。这是最重要的爬虫属性,它是必需的。

如果爬虫抓取单个域名,通常的做法是在域后面命名爬虫。因此,例如,抓取的爬虫mywebsite.com通常会被调用 mywebsite。

注意
在Python 2中,这必须是ASCII。

allowed_domains
允许此爬虫抓取的域的字符串的可选列表,指定一个列表可以抓取,其它就不会抓取了。

start_urls
当没有指定特定网址时,爬虫将开始抓取的网址列表。

custom_settings
运行此爬虫时将从项目宽配置覆盖的设置字典。它必须定义为类属性,因为设置在实例化之前更新。

有关可用内置设置的列表,请参阅: 内置设置参考。

crawler
此属性from_crawler()在初始化类后由类方法设置,并链接Crawler到此爬虫实例绑定到的对象。

Crawlers在项目中封装了很多组件,用于单个条目访问(例如扩展,中间件,信号管理器等)。有关详情,请参阅抓取工具API。

settings
运行此爬虫的配置。这是一个 Settings实例,有关此主题的详细介绍,请参阅设置主题。

logger
用Spider创建的Python记录器name。您可以使用它通过它发送日志消息,如记录爬虫程序中所述。

from_crawler(crawler, args,* kwargs )
是Scrapy用来创建爬虫的类方法。

您可能不需要直接覆盖这一点,因为默认实现充当方法的代理,init()使用给定的参数args和命名参数kwargs调用它。

尽管如此,此方法 在新实例中设置crawler和settings属性,以便以后可以在爬虫程序中访问它们。

参数:

crawler(Crawlerinstance) - 爬虫将绑定到的爬虫

args(list) - 传递给init()方法的参数

kwargs(dict) - 传递给init()方法的关键字参数

start_requests()
此方法必须返回一个可迭代的第一个请求来抓取这个爬虫。

有了start_requests(),就不写了start_urls,写了也没有用。

默认实现是:start_urls,但是可以复写的方法start_requests。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络爬虫程序   什么是网络爬虫(Spider)程序   Spider又叫WebCrawler或者Robot,是一个沿着链接漫游Web 文档集合的程序。它一般驻留在服务器上,通过给定的一些URL,利用HTTP等标准协议读取相应文档,然后以文档中包括的所有未访问过的URL作为新的起点,继续进行漫游,直到没有满足条件的新URL为止。WebCrawler的主要功能是自动从Internet上的各Web 站点抓取Web文档并从该Web文档中提取一些信息来描述该Web文档,为搜索引擎站点的数据库服务器追加和更新数据提供原始数据,这些数据包括标题、长度、文件建立时间、HTML文件中的各种链接数目等   1. 搜索策略   ① IP 地址搜索策略   先赋予爬虫一个起始的IP地址,然后根据IP地址递增的方式搜索本IP地址段后的每一个WWW 地址中的文档,它完全不考虑各文档中指向其它Web 站点的超级链接地址。优点是搜索全面,能够发现那些没被其它文档引用的新文档的信息源;缺点是不适合大规模搜索。   ② 深度优先搜索策略   深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。优点是能遍历一个Web 站点或深层嵌套的文档集合;缺点是因为Web结构相当深,,有可能造成一旦进去,再也出不来的情况发生。   ③ 宽度优先搜索策略   在宽度优先搜索中,先搜索完一个Web 页面中所有的超级链接,然后再继续搜索下一层, 直到底层为止。例如,一个HTML 文件中有三个超链,选择其中之一并处理相应的HTML文件,然后不再选择第二个HTML文件中的任何超链, 而是返回并选择第二个超链,处理相应的HTML文件,再返回,选择第三个超链并处理相应的HTML文件。一旦一层上的所有超链都己被选择过,就可以开始在刚才处理过的HIML 文件中搜索其余的超链。这就保证了对浅层的首先处理。当遇到一个无穷尽的深层分支时,不会导致陷进WWW 中的深层文档中出现出不来的情况发生。宽度优先搜索策略还有一个优点,即它能在两个HTML文件之间找到最短路径。宽度优先搜索策略通常是实现爬虫的最佳策略,因为它容易实现,而且具备大多数期望的功能。但是如果要遍历一个指定的站点或者深层嵌套的HTML文件集,用宽度优先搜索策略则需要花费比较长的时间才能到达深层的HTML文件。综合考虑以上几种策略和国内信息导航系统搜索信息的特点,国内一般采用以宽度优先搜索策略为主、线性搜索策略为辅的搜索策略。对于某些不被引用的或很少被引用的HTML文件,宽度优先搜索策略可能会遗漏这些孤立的信息源,可以用线性搜索策略作为它的补充。   ④ 专业搜索引擎的爬虫策略   目前,专业搜索引擎网络爬虫通常采用“最好优先”原则访问WEB,即为快速、有效地获得更多的与主题相关的页面(简称“回报”),每次选择“最有价值”的链接进行访问。由于链接包含于页面之中,而通常具有较高价值的页面包含的链接也具有较高的价值,因而对链接价值的评价有时也转换为对页面价值的评价。   ⑤ 爬虫的设计中应该注意的问题   第一个问题是URL地址的标准化:在WWW上,一个URL地址可以有多种表示方法,可以用IP 地址表示,也可以用域名来表示。为了避免爬虫重复访问同一地址。第二个问题是避免掉进网络陷阱:网络上的链接情况比较复杂,一些静态的网页可能构成闭环回路。为了避免爬虫在一条循环路线上反复抓取,在把URL加入待搜索地址列表之前都要检查是否已在待搜索的地址列表中出现过。对于动态网页,爬虫应该忽略所有带参数的URL。第三个问题:对于拒绝访问的页面,爬虫应该遵从“漫游拒绝访问规则”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值