在学习《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 from scrapy.utils.project import get_project_settings 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,}") #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) request = scrapy.Request(url=url, callback=self.parse_body)
request.meta['item'] = item # 将item暂存
yield request 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) def parse_body(self,response):
item=response.meta['item']
body=response.xpath('.//*[@class="postBody"]')
item['image_urls']=body.xpath('.//img/@src').extract()
yield item if __name__ == '__main__':
# settings = get_project_settings() # 启动爬虫方法一
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() 上面是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的链接。
再次检查发现表达式的问号没有转义
当改为
links = LinkExtractor(allow="/qiyeboy/default.html\?page=\d{1,}")
就能正常爬取数据,并保存为json,以及下载图片

【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. python中的popitem

    popitem()随机删除字典中的任意键值对,并返回到元组中 1 a = { 2 "name":"dlrb", 3 "age":25, 4 ...

  2. Cannot invoke Tomcat manager: socket write error

    一开始, 参照 http://www.cnblogs.com/yezhenhan/archive/2012/07/17/2594684.html mvn tomcat:redeploy 出现: Can ...

  3. java -version 问题 : C:\ProgramData\Oracle\Java\javapath;

    我把 JAVA_HOME 从8改成了 7 , 为什么还是 显示的8啊 ! E:\sv0\jars>java -version java version "1.8.0_111" ...

  4. 《锋利的JQuery》中的动画效果:

    说实话,虽然这本书已经很老了,老到什么程度呢,这本书以JQuery1.9以前的版本写就的,toggle()方法的(func1,func2,...)这个切换事件的功能已经被删去了 但是这本书还是挺8错的 ...

  5. 转载:return *this和return this

    文章出处,感谢分享http://blog.csdn.net/stpeace/article/details/22220777 别跟我说, return *this返回当前对象, return this ...

  6. zabbix模块注意

    1,每个监控组使用一个模版,对模版操作时会对监控组的每个模版进行修改操作.

  7. js/jquery this 坑

    重要:js onclick() 函数中,取不到this !!! 错误的写法: function test(){ $(this).parent().addClass('active') } 正确的写法是 ...

  8. centos LVM详解

    title: centos LVM详解 date: 2018-04-24 14:00:03 tags: [linux,centos,LVM] --- 知识了解 LVM关系图 fdisk命令详解 [ro ...

  9. ---github git clone 加速

    https://www.zhihu.com/question/27159393/answer/35528173 git config --global http.postBuffer 52428800 ...

  10. jquery接触初级-----juqery DOM操作实例,动态图片显示

    1. 要求:对一个a标签元素,当鼠标操作,移入时,显示a标签title属性的信息,鼠标移出时,隐藏a标签属性的title属性信息 a 标签本身的title 属性具有自我显示的特性,但是这个特性比较慢, ...