博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scrapy 的三个入门应用场景
阅读量:6036 次
发布时间:2019-06-20

本文共 2944 字,大约阅读时间需要 9 分钟。

说明

本文参照了的 dmoz 爬虫例子。

不过这个例子有些年头了,而 dmoz.org 的网页结构已经不同以前。所以我对xpath也相应地进行了修改

概要

本文提出了scrapy 的三个入门应用场景

  1. 爬取单页
  2. 根据目录页面,爬取所有指向的页面
  3. 爬取第一页,然后根据第一页的连接,再爬取下一页...。依此,直到结束

对于场景二、场景三可以认为都属于:链接跟随()

链接跟随的特点就是:在 parse 函数结束时,必须 yield 一个带回调函数 callback 的 Request 类的实例

本文基于:windows 7 (64) + python 3.5 (64) + scrapy 1.2

场景一

描述

爬取单页内容

示例代码

import scrapyfrom tutorial.items import DmozItemclass DmozSpider(scrapy.Spider):    name = "dmoz"    allowed_domains = ["dmoz.org"]    start_urls = [        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"    ]    def parse(self, response):                for div in response.xpath('//div[@class="title-and-desc"]'):            item = DmozItem()            item['title'] = div.xpath('a/div/text()').extract_first().strip()            item['link'] = div.xpath('a/@href').extract_first()            item['desc'] = div.xpath('div[@class="site-descr "]/text()').extract_first().strip()            yield item

场景二

描述

  • ①进入目录,提取连接。
  • ②然后爬取连接指向的页面的内容
    其中①的yield scrapy.Request的callback指向②

...extract the links for the pages you are interested, follow them and then extract the data you want for all of them.

示例代码

import scrapyfrom tutorial.items import DmozItemclass DmozSpider(scrapy.Spider):    name = "dmoz"    allowed_domains = ["dmoz.org"]    start_urls = [        'http://www.dmoz.org/Computers/Programming/Languages/Python/' # 这是目录页面    ]        def parse(self, response):        for a in response.xpath('//section[@id="subcategories-section"]//div[@class="cat-item"]/a'):            url = response.urljoin(a.xpath('@href').extract_first().split('/')[-2])            yield scrapy.Request(url, callback=self.parse_dir_contents)                    def parse_dir_contents(self, response):        for div in response.xpath('//div[@class="title-and-desc"]'):            item = DmozItem()            item['title'] = div.xpath('a/div/text()').extract_first().strip()            item['link'] = div.xpath('a/@href').extract_first()            item['desc'] = div.xpath('div[@class="site-descr "]/text()').extract_first().strip()            yield item

场景三

描述

  • ①进入页面,爬取内容,并提取下一页的连接。
  • ②然后爬取下一页连接指向的页面的内容
    其中①的yield scrapy.Request的callback指向①自己

A common pattern is a callback method that extracts some items, looks for a link to follow to the next page and then yields a Request with the same callback for it

示例代码

import scrapyfrom myproject.items import MyItemclass MySpider(scrapy.Spider):    name = 'example.com'    allowed_domains = ['example.com']    start_urls = [        'http://www.example.com/1.html',        'http://www.example.com/2.html',        'http://www.example.com/3.html',    ]    def parse(self, response):        for h3 in response.xpath('//h3').extract():            yield MyItem(title=h3)        for url in response.xpath('//a/@href').extract():            yield scrapy.Request(url, callback=self.parse)

说明

第三个场景未测试!

转载地址:http://vulhx.baihongyu.com/

你可能感兴趣的文章
获取post传输参数
查看>>
ASP生成静态页面的方法
查看>>
HDU 1325 Is It A Tree? 判断是否为一棵树
查看>>
Shell命令-文件压缩解压缩之gzip、zip
查看>>
个人总结
查看>>
uva 673 Parentheses Balance
查看>>
Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
查看>>
css 禁止选中文本
查看>>
bzoj2165
查看>>
tomcat 配置首页
查看>>
算术运算表达式正则及分析
查看>>
Oracle 12c 多租户 手工创建 pdb 与 手工删除 pdb
查看>>
shell初涉
查看>>
[浪子学编程][MS Enterprise Library]ObjectBuilder之创建策略祥解(二)
查看>>
ASP.NET 中设置路径的三种方式
查看>>
EBS使用 Distributed AD在多个节点并行adpatch
查看>>
windows添加和删除服务
查看>>
关于云栖,有点无语的几个地方,管理能不能管?
查看>>
Windows线程的同步与互斥
查看>>
C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入
查看>>