1. 在学习《python爬虫开发与项目实践》的时候有一个关于CrawlSpider的例子,当我在运行时发现,没有爬取到任何数据,以下是我敲的源代码:
    import scrapy
    from UseScrapyProject.items import UsescrapyprojectItem
    from scrapy.spiders import CrawlSpider
    from scrapy.spiders import Rule
    from scrapy.linkextractors import LinkExtractor
    from scrapy.crawler import CrawlerProcess
    from scrapy import Selector
  2.  
  3. from scrapy.utils.project import get_project_settings
  4.  
  5. class SpiderUserCrawlSpider(CrawlSpider):
    name ="secondSpider"
    allow_domains=['cnblogs.com']
    start_urls=['http://www.cnblogs.com/qiyeboy/default.html?page=1']
    links = LinkExtractor(allow="/qiyeboy/default.html?page=\d{1,}")
  6.  
  7. #rules是CrawlSpider比scrapy.Spider新增的参数
    rules = (
    Rule(link_extractor=links,follow=True,callback="parse_item"),
    )
    #Rule的回调函数
    def parse_item(self,response):
    papers=response.xpath(".//*[@class='day']")
    #从每篇文章中抽取数据
    for paper in papers:
    date=paper.xpath(".//*[@class='dayTitle']/a/text()").extract()[0]
    title = paper.xpath(".//*[@class='postTitle']/a/text()").extract()[0]
    content = paper.xpath(".//*[@class='postCon']/div/text()").extract()[0]
    url = paper.xpath(".//*[@class='postTitle']/a/@href").extract()[0]
    # 把抽取到的数据结构化
    item = UsescrapyprojectItem(date=date, title=title, content=content, url=url)
  8.  
  9. request = scrapy.Request(url=url, callback=self.parse_body)
    request.meta['item'] = item # 将item暂存
    yield request
  10.  
  11. next_page=Selector(response).re(u'<a href="(\S*)">下一页</a>')
    if next_page:#如果存在下一页
    #返回一个请求,url参数是下一页的地址,callback是回调的函数(这里的是把下一页的响应返回到parse函数继续抽取信息)
    yield scrapy.Request(url=next_page[0],callback=self.parse)
  12.  
  13. def parse_body(self,response):
    item=response.meta['item']
    body=response.xpath('.//*[@class="postBody"]')
    item['image_urls']=body.xpath('.//img/@src').extract()
    yield item
  14.  
  15. if __name__ == '__main__':
    # settings = get_project_settings()
  16.  
  17. # 启动爬虫方法一
    process=CrawlerProcess({
    'USER_AGENT':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    })
    process.settings = get_project_settings()
    process.crawl(SpiderUserCrawlSpider)
    # 如果有多个Spider,可以写多几个
    #process.crawl(SecondTestSpider)
    process.start()
  18.  
  19. 上面是spider的源代码,一直没有爬取到结果,断点调试的时候发现根本没有跑进parse_item,网上查了很久,很多人表示callback不能使用默认的parse,可是我这里已经是parse_item
    然后尝试重新给parse_item取了别的名字,仍然是不行
    直到看见某帖子里有人提到没有匹配到连接所以没有爬到数据,于是,就去检查LinkExtractor(allow="/qiyeboy/default.html?page=\d{1,}")中的正则表达式,
    果然,当我使用Regex Match Tracer 2.1去验证的时候发现这个表达式发现果然是没法匹配到http://www.cnblogs.com/qiyeboy/default.html?page=1的链接。
    再次检查发现表达式的问号没有转义
    当改为
  1. links = LinkExtractor(allow="/qiyeboy/default.html\?page=\d{1,}")
    就能正常爬取数据,并保存为json,以及下载图片
  2.  

【Spider】使用CrawlSpider进行爬虫时,无法爬取数据,运行后很快结束,但没有报错的更多相关文章

  1. 利用jsoup爬虫工具,爬取数据,并利用excel导出

    import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileInputStream; i ...

  2. 爬虫---scrapy全站爬取

    全站爬取1 基于管道的持久化存储 数据解析(爬虫类) 将解析的数据封装到item类型的对象中(爬虫类) 将item提交给管道, yield item(爬虫类) 在管道类的process_item中接手 ...

  3. [python爬虫] Selenium定向爬取海量精美图片及搜索引擎杂谈

    我自认为这是自己写过博客中一篇比较优秀的文章,同时也是在深夜凌晨2点满怀着激情和愉悦之心完成的.首先通过这篇文章,你能学到以下几点:        1.可以了解Python简单爬取图片的一些思路和方法 ...

  4. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...

  5. Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)

    1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...

  6. 爬虫实战——Scrapy爬取伯乐在线所有文章

    Scrapy简单介绍及爬取伯乐在线所有文章 一.简说安装相关环境及依赖包 1.安装Python(2或3都行,我这里用的是3) 2.虚拟环境搭建: 依赖包:virtualenv,virtualenvwr ...

  7. 芝麻HTTP:Python爬虫实战之爬取糗事百科段子

    首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的 ...

  8. Python网络爬虫与如何爬取段子的项目实例

    一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...

  9. 爬虫学习--MOOC爬取豆瓣top250

    scrapy框架 scrapy是一套基于Twisted的异步处理框架,是纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松实现一个爬虫,用来抓取网页内容或者各种图片. scrapy E ...

随机推荐

  1. GitHub使用指南之快速入门

    出自http://blog.csdn.net/column/details/13170.html 1.Git安装 Git是一个版本控制系统,使用之前必须先下载安装,下面提供各平台的安装方式. Mac: ...

  2. RabbitMq (1)

    1.传递模型 点对点模型(PTP) 发布-订阅模型 -------------------------------------------------------------------------- ...

  3. SpringBoot读取application.properties文件内容

    application.properties存储数据的方式是key-value. application.properties内容 userManager.userFile=data/user.pro ...

  4. 函数参数,const 引用 和 非 const引用是不同的函数。

    举个例子, void f(const int &x) 和 void f(int &x) 是不同的函数. 函数的返回值不能作为区分

  5. 递归获取包下的class文件

    ```java(这个居然隐藏不了) public class TestUrl { public static void main(String[] args) { String pageName = ...

  6. debian9 下编译安装tengine2.2.1

    首先下载tengine的源码包,这个大家都会下载吧 wget http://tengine.taobao.org/download/tengine-2.2.1.tar.gz 然后解压缩 tar zxf ...

  7. delphi通过TADOConnection组件直接连接MSSQL数据库并读写数据。

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  8. Delphi动态配置ODBC数据源--SQL Server版本

    (摘自)http://jxlearnew.blog.163.com/blog/static/549786592007102451431413/ 这里介绍一种用Delphi来实现动态注册的方法,希望对各 ...

  9. 21.struts-Action配置.md

    目录 1.Action开发方式 2.通配符 访问地址 [toc] 3.常量 后缀 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freema ...

  10. numpy-帮助文档 & 速查表.md

    目录 转相关资料: 速查表 速查代码 转相关资料: 官方手册 易佰教程 gitbook ZMonster's Blog 速查表 速查代码 # -*- coding: utf-8 -*- "& ...