scrapy采集列表页的另一种方式

又是采集绿色下载站的最新软件,又是采用另一种方式(前两种是采用正则和xpath),呵呵

感觉有点像孔乙已的茴字有几种写法了

这回用CrawlSpider,Rule来配合采集

这次不用生成许多start_urls列表项了,可以按规则来自动读取,贴核心代码

# -*- coding: utf-8 -*-
from scrapy.contrib.spiders import CrawlSpider,Rule
from scrapy.selector import Selector
from scrapy.http import Request
from scrapy.contrib.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
    name = "downg"
    allowed_domains = ["downg.com"]
    start_urls = [
        ‘http://www.downg.com/new/0_1.html‘
    ]

    rules = [

        Rule(LinkExtractor(allow=(‘/new/0_\d\.html‘),
                              restrict_xpaths=(‘//div[@class="pages"]‘)),
             callback=‘parse_pages‘,
             follow=True)
    ]

    def parse_pages(self, response):
        sel=Selector(response)
        urlsReqs=[]
        urls_list=sel.xpath(‘//span[@class="app-name"]/a/@href‘).extract()
        print len(urls_list),urls_list
        for url in urls_list:
            req=Request(url,self.getDetail)
            urlsReqs.append(req)
        return urlsReqs

    def getDetail(self,response):
        print response.url

关键点解析:

LinkExtractor的allow定位列表页所匹配的正则
LinkExtractor的restrict_xpaths是定位列表页所在的xpath路径,当然,本案例中其实也可以不写
LinkExtractor的callback指定回调函数,注意,这里函数名不能用parse这个私有函数,不然跑起来会有问题
(来源,scrapy官方文档:
当编写爬虫规则时,请避免使用 parse 作为回调函数。 由于 CrawlSpider 使用 parse 方法来实现其逻辑,如果 您覆盖了 parse 方法,crawl spider 将会运行失败。
)

LinkExtractor的follow 是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。 如果 callback 为None, follow 默认设置为 True ,否则默认为 False。本案例中用哪个值没有影响。

参考文章
http://blog.csdn.net/u012150179/article/details/34913315

scrapy采集列表页的另一种方式,布布扣,bubuko.com

时间: 2024-11-18 00:43:56

scrapy采集列表页的另一种方式的相关文章

火车头采集列表页

采集列表页内容 思路:将列表页地址当做内容页处理==>循环采集列表信息 下面以采集实例学习 访问http://www.budejie.com/duanzi,下图可看到要采集的内容和地址 列表规则 内容采集 这里循环匹配,才能采集到所有内容

前嗅ForeSpider教程:采集表格/列表页中的数据(翻页)

以孔夫子旧书网的最近出版板块为例(http://www.kongfz.com/1004/)为例,采集列表页的所有数据:第一步:新建任务①击左上角"加号"新建任务,如图1: ②在弹窗里填写采集地址,任务名称如图2:③点击下一步,选择进行数据抽取还是链接抽取,本次采集需要采集当前板块的列表页所有内容,所以只需要在同一个模板中进行翻页链接抽取以及数据抽取即可.此处需要勾选"抽取链接"-"普通翻页"以及"抽取数据",如图3: 第二步:

System.Web.Http.Cors配置跨域访问的两种方式

System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心得.在webapi中使用System.Web.Http.Cors配置跨域信息可以有两种方式.  一种是在App_Start.WebApiConfig.cs的Register中配置如下代码,这种方式将在所有的webapi Controller里面起作用. using System; using Sys

js Dom(三)节点、元素创建3种方式、为元素绑定多个事件addEventListener、attachEvent

目录: 1.节点的概念    2.节点的属性(nodeType,nodeName,nodeValue)    3.父节点(父元素)    4.获取子节点或子元素    5.获取节点.元素的方法(12行代码)    6.案例:div标签里面的p标签背景高亮(使用子节点或子元素的方式)    7.封装节点兼容代码    8.案例:切换背景图片    9.案例:全选.全不选    10.元素创建的第一种方式  document.write("<p>文本</P>"); 

DEDECMS5.5/5.6/5.7列表页调用TAG标签(热门标签)的两种方法

DEDECMS5.5/5.6/5.7列表页调用TAG标签的两种方法: 一.DedeCMSv5.6及其以前版本: dedecms默认在列表是无法调用tag标签的,经过各位版主们的帮助,现给大家提供出2种方法. 方法1: 在列表需要的位置加入下列代码: [field:id runphp=yes] $tsql = new DedeSql(false); $tags = ''; $tsql->SetQuery("Select i.tagname From dede_tag_list t left 

前嗅ForeSpider教程:采集表格/列表页中的数据(不翻页)

第一步:新建任务 ① 击左上角"加号"新建任务,如图1: [图1] ②在弹窗里填写采集地址,任务名称如图2: [图2] ③点击下一步,选择进行数据抽取还是链接抽取,本次采集需要采集当前页面列表中的所有内容,所以只需抽取列表数据即可,点击"抽取数据",如图3: [图3] 第二步:创建/选择表单 在ForeSpider爬虫中,表单是可以复用的,所以可以在数据表单出直接选择之前建过的表单,也可以通过表单ID来进行查找并关联数据表单.此处使用的是的前嗅的表单,如图4 方法一

dede列表页调用文章body内容

dede列表页调用文章描述相比较简单采用标签[field:description function='cn_substr(@me,180)'/]   180是字数 另外一种就是在列表页调用文章调用正文body的内容而非描述,这个需要做二次开发如下(测试版本dede5.7 gbk 2015年11月4日) 在include/extend.func.php 增加以下自定义函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function GetOneArchiveBody(

列表页的动态条件搜索

在我是如何做列表页的,我提到了列表页的动态条件搜索,主要的目的就是在View中能够动态的指定条件,而后端的数据查询逻辑尽量不变.之前在搞.net的时候,我们可以借助强大的ExpressionTree来解决,之前有一篇是微软的EntityFramework表达式转换:Linq to Entity经验:表达式转换,是将一种表达式转换成数据库组件能够识别的表达式,只不过那篇没有涉及到View中的条件而已.页面动态查询的最简单的方法就是解析View中特定的值来得到后台组件能够识别的查询逻辑.    我们

DEDECMS5.7首页列表页调用TAG标签(链接)教程

dedecms v5.7版本直接使用标签:[field:id function=GetTags(@me)/] ,就可以调用出来了只不过不带连接的,如果需要连接,请注释掉include\helpers\archive.helper.php文件的130行: $tags .= ($tags=='' ? $row['tag'] : ','.$row['tag']); 用下面语句替换,这里你可以加上你自己的样式 $tags .= "<a href='/tags.php?/".urlenco