基于python2.7爬虫scrapy的scrapy爬虫,关于增量爬取是怎么处理的

Python Scrapy爬虫,整站爬取妹子图 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 22时,
Python&Scrapy爬虫,听说妹子图挺火,我整站爬取了,上周一共搞了大概8000多张图片。和大家分享一下。项目地址:/ZhangBohan/fun_crawler
代码片段(3)
1.&[图片] 0000.jpeg&&&&
2.&[代码]核心爬虫代码&&&&
# -*- coding: utf-8 -*-
from scrapy.selector import Selector
import scrapy
from scrapy.contrib.loader import ItemLoader, Identity
from fun.items import MeizituItem
class MeizituSpider(scrapy.Spider):
name = "meizitu"
allowed_domains = [""]
start_urls = (
def parse(self, response):
sel = Selector(response)
for link in sel.xpath('//h2/a/@href').extract():
request = scrapy.Request(link, callback=self.parse_item)
yield request
pages = sel.xpath("//div[@class='navigation']/div[@id='wp_page_numbers']/ul/li/a/@href").extract()
print('pages: %s' % pages)
if len(pages) & 2:
page_link = pages[-2]
page_link = page_link.replace('/a/', '')
request = scrapy.Request('/a/%s' % page_link, callback=self.parse)
yield request
def parse_item(self, response):
l = ItemLoader(item=MeizituItem(), response=response)
l.add_xpath('name', '//h2/a/text()')
l.add_xpath('tags', "//div[@id='maincontent']/div[@class='postmeta
clearfix']/div[@class='metaRight']/p")
l.add_xpath('image_urls', "//div[@id='picture']/p/img/@src", Identity())
l.add_value('url', response.url)
return l.load_item()
fun_crawler-master.zip&~&7KB&&&&
(1219)&&&&
开源中国-程序员在线工具:
相关的代码(510)
100回/35359阅
8回/33400阅
62回/26089阅
26回/20708阅
3回/20010阅
1回/17669阅
25回/16715阅
8回/16258阅
40回/15943阅
32回/14438阅
真狠,整站都给扒了。。将来人家站长加header了。
2楼:张伯函 发表于
引用来自“isaacchen”的评论真狠,整站都给扒了。。将来人家站长加header了。额,肿么加Header
3楼:深爱着你们 发表于
会不会限入死循环呀
4楼:张伯函 发表于
引用来自“陈为迪”的评论会不会限入死循环呀不会的,下一页下一页爬的
5楼:深爱着你们 发表于
我最近在写一个采集程序。不过我的规则是一开始就设置好的,把网址抓下来之后还要对数据处理。我觉得还是数据处理这一块会比较麻烦。
6楼:张伯函 发表于
可以用Scrapy-Redis这类插件先把数据持久化,然后做二次处理,处理数据肯定是最麻烦的一个环节
/darkrho/scrapy-redis
7楼:Feng_Yu 发表于
这网站很火啊,天天被爬虫爬
8楼:张伯函 发表于
引用来自“Feng_Yu”的评论这网站很火啊,天天被爬虫爬刚需嘛,你懂的
9楼:liulu72056 发表于
发现一个好网站,谢谢分享
10楼:Nicksxs 发表于
ImportError: No module named twisted
已经安装了
11楼:张伯函 发表于
引用来自“Nicksxs”的评论ImportError: No module named twisted
已经安装了
twisted哦?怎么会报这个错误,刚刚试着重新安装了一次这个问题没有重现 (venv)? fun git:(master) ? pip list cffi (0.8.6) cryptography (0.6.1) cssselect (0.9.1) lxml (3.4.1) pip (1.5.4) pycparser (2.10) pyOpenSSL (0.14) queuelib (1.2.2) requests (2.5.0) Scrapy (0.24.4) setuptools (2.2) six (1.8.0) Twisted (14.0.2) w3lib (1.10.0) wsgiref (0.1.2) zope.interface (4.1.1)
12楼:Nicksxs 发表于
引用来自“Nicksxs”的评论ImportError: No module named twisted
已经安装了
twisted引用来自“张伯函”的评论哦?怎么会报这个错误,刚刚试着重新安装了一次这个问题没有重现 (venv)? fun git:(master) ? pip list cffi (0.8.6) cryptography (0.6.1) cssselect (0.9.1) lxml (3.4.1) pip (1.5.4) pycparser (2.10) pyOpenSSL (0.14) queuelib (1.2.2) requests (2.5.0) Scrapy (0.24.4) setuptools (2.2) six (1.8.0) Twisted (14.0.2) w3lib (1.10.0) wsgiref (0.1.2) zope.interface (4.1.1)是不是因为gfw?
13楼:颓废的幻想者 发表于
引用来自“张伯函”的评论可以用Scrapy-Redis这类插件先把数据持久化,然后做二次处理,处理数据肯定是最麻烦的一个环节
/darkrho/scrapy-redis什么事数据持久化
14楼:张伯函 发表于
引用来自“张伯函”的评论可以用Scrapy-Redis这类插件先把数据持久化,然后做二次处理,处理数据肯定是最麻烦的一个环节
/darkrho/scrapy-redis引用来自“myjack”的评论什么事数据持久化额。。。就是存起来。存到数据库、文件。只要不丢的地方都可以说是持久化
15楼:张伯函 发表于
引用来自“Nicksxs”的评论ImportError: No module named twisted
已经安装了
twisted引用来自“张伯函”的评论哦?怎么会报这个错误,刚刚试着重新安装了一次这个问题没有重现 (venv)? fun git:(master) ? pip list cffi (0.8.6) cryptography (0.6.1) cssselect (0.9.1) lxml (3.4.1) pip (1.5.4) pycparser (2.10) pyOpenSSL (0.14) queuelib (1.2.2) requests (2.5.0) Scrapy (0.24.4) setuptools (2.2) six (1.8.0) Twisted (14.0.2) w3lib (1.10.0) wsgiref (0.1.2) zope.interface (4.1.1)引用来自“Nicksxs”的评论是不是因为gfw?不是吧。你那边是什么系统。不会是Windows吧?
16楼:猥琐致胜 发表于
你好,我程序运行起来之后,扒下的图片全是0字节大小
17楼:张伯函 发表于
引用来自“猥琐致胜”的评论你好,我程序运行起来之后,扒下的图片全是0字节大小你那边是什么操作系统,程序LOG发出来看一下^_^
18楼:猥琐致胜 发表于
引用来自“猥琐致胜”的评论你好,我程序运行起来之后,扒下的图片全是0字节大小引用来自“张伯函”的评论你那边是什么操作系统,程序LOG发出来看一下^_^用的是kali, 程序的log小白没找到╮(╯▽╰)╭,还望指教
19楼:张伯函 发表于
引用来自“猥琐致胜”的评论你好,我程序运行起来之后,扒下的图片全是0字节大小引用来自“张伯函”的评论你那边是什么操作系统,程序LOG发出来看一下^_^引用来自“猥琐致胜”的评论用的是kali, 程序的log小白没找到╮(╯▽╰)╭,还望指教没问题啊。 程序运行之后LOG直接就是标准输出,直接在命令行里就可以看到的哦 额,弱弱的提醒一下,这个程序需要到那个Github地址下载完整的项目。PS:一会我打个包传上也
20楼:Nicksxs 发表于
引用来自“Nicksxs”的评论ImportError: No module named twisted
已经安装了
twisted引用来自“张伯函”的评论哦?怎么会报这个错误,刚刚试着重新安装了一次这个问题没有重现 (venv)? fun git:(master) ? pip list cffi (0.8.6) cryptography (0.6.1) cssselect (0.9.1) lxml (3.4.1) pip (1.5.4) pycparser (2.10) pyOpenSSL (0.14) queuelib (1.2.2) requests (2.5.0) Scrapy (0.24.4) setuptools (2.2) six (1.8.0) Twisted (14.0.2) w3lib (1.10.0) wsgiref (0.1.2) zope.interface (4.1.1)引用来自“Nicksxs”的评论是不是因为gfw?引用来自“张伯函”的评论不是吧。你那边是什么系统。不会是Windows吧?ubuntu14.10
开源从代码分享开始
张伯函的其它代码基于python的scrapy爬虫,关于增量爬取是怎么处理的
我当初就是因为无法增量抓取所以放弃 scrapy 的。因为我们的场景,定时更新,增量抓取是非常重要的,这要求很强 url 去重,调度策略逻辑。而 scrapy 的内存去重实在是太简陋了。于是,pyspider 就这么诞生了。。目前似乎没有官方方案,这里有一个非官方的patch,可以存储scrapy的状态,下次运行时恢复。原帖在这里http:///questions/7312093/how-can-i-stop-a-scrapy-crawlspider-and-later-resume-where-it-left-off对于只是读取某几个网站更新内容的爬虫完全没必要在python代码中实现增量的功能,直接在item中增加Url字段。item['Url'] = response.url
然后在数据端把储存url的column设置成unique。之后在python代码中捕获数据库commit时返回的异常,忽略掉或者转入log中都可以。我使用的是SqlAlchemy。我是这么写的from sqlalchemy.exc import IntegrityError
class XxxPipeline(object):
def process_item(self, item, spider):
#一些session.add()
print 'crawl %s done!' % item['Url']
except IntegrityError:
print 'skip %s .' % item['Url']
return item
虽然每次crawl都会重复抓取一些数据,但最终结果库内不会有相同的Url。对于小规模的爬虫,这种重复抓取的成本基本可以忽略。new to scrapy, 仅提供几个思路,详细解决方案,自己解决后后续跟进。如果只是一次性的抓取某个网站的全部内容, 中途需要暂停并且恢复,只需要scrapy crawl somespider -s JOBDIR=crawls/somespider-1
参考:Jobs: pausing and resuming crawls如果需求是过滤某些url,但是网站的主入口不被过滤掉,比如典型的论坛类网站,你只想过滤掉帖子,但是却不想过滤掉板块,你可以定制一下requestSeenscrapy/dupefilter.py at 0.24 · scrapy/scrapy · GitHubpython - how to filter duplicate requests based on url in scrapy如果使所有网站的动态过滤,比如是不是多了一个新回复,在url上的变化并不能体现出来,搜索引擎采用的是一系列的算法,判断某一个页面的更新时机。个人应用一般不会使用到(其实是自己也不懂,写出来提供一下思路,也许你会呢)。大部分的网页在进入下一级页面的时候都会有一个类似于最后更新时间,最后活动时间等等,可以根据这个来进行判断。网上有说支持增量的,我看了代码+实际测试,还是觉得不是增量的...我的做法是pipeline的open_spider时读取所有item里面的url,做成一个parsed_urls的list,在rule的process_link中过滤掉这些已经下载的url,如果需要的话可以再item里面加入last_notify属性进一步扩展...另外我遇到过一个问题,pipeline处理完一个item后scrapy整个会卡住,你遇到过么?INFO: Crawled 255 pages (at 4 pages/min), scraped 8 items (at 3 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min)INFO: Crawled 255 pages (at 0 pages/min), scraped 8 items (at 0 items/min).......
更多相关文章
新手,想使用scrapy做爬虫,不过前期安装配置就折腾半天.其中 pyOpenSSL和以前不一样了,目前只有 tar.gz的版本(https://pypi.python.org/pypi/pyOpenSSL/),没有exe.msi或者egg,不知道在win8 64下如何安装?谢谢大家!换linux
Python与Java各自适合的场景是哪些?有什么不同定位?python能做什么?1, 网站业务逻辑的开发python有一个优良的网页开发框架django, django支持各种主流数据库,有好用的orm系统和模板系统,完善的第三方库能帮助解决遇到的大部分问题. 并且支持各种操作系统.2, 数据分析 ...
本人学生,零编程基础,在学习python的过程中越学越迷茫,感觉像无头苍蝇一样,来知道取经,下面进入正题吧:我是先看了中谷的python教学视频,然后跟着慕课网上的python教程把题目做了一遍,然后就开始看django,看了&django web开发指南&,又看&dj ...
看到最新Python版本是3.4,但是网上的资料,包括出版的书籍,都是最晚到13年左右,很多细节都不同,语法也过时了.那此时应该直接学习3.X还是2.X?如果前者的话,有什么推荐的资料或者书么?最好中文.英文看起来效率会比较低.必须果断学 3,并且,万一有需要要写 Py2 的东西,记得最开始写上fr ...
1.对页面的解析能力2.对数据库的操作能力(mysql)3.爬取效率4.代码量推荐语言时说明所需类库或者框架,谢谢.比如:python+MySQLdb+urllib2+reps:其实我不太喜欢用python(可能是在windows平台的原因,需要各种转字符编码,而且多线程貌似很鸡肋.)主要看你定义的 ...
我在模拟登录新浪微博时,每次请求完毕都会被定向至Sina Visitor System,知道的爬虫貌似也遇到了这个问题.Sina Visitor System源码参见:/bindog/3aaf8a67da2b8ab48cfa#file-sina-visi ...
初学Python,要想让自己的Python代码更加Pythonic,所以想找一些Pythonic的代码来看看!.看到邀请已经很久了,一直没敢回答,主要是我自己没有读过多少模块的源码,因为我一直认为读源码是一种比较&低效&的学习方法.我用 yolk -al 看了一下安装的模块,发现 ...
想学一点爬取网络数据的工具,R有基础,Python的话要从头学,求高手指点下对于结构比较良好的网页,用rvest包效率最高,可以用css和xpath选择器,用管道操作.hadley/rvest · GitHub任坤 学生玩玩入门爬虫的话,对于采集一下简单的网页代码,Python与 ...
公司办事处在西三环的外文大厦,属于外企工程销售类工作,前六个月没有奖金只有这么多工资,因为是河北人在北京有不少同学,免不了吃饭请客的开销,想请问大家租多少价位的房子合适,以及如何规划自己的财产.由北京户口吗? 201 ...
&Programs can't yet make your bed& 这句话什么意思?
微软公司.美国联邦调查局(FBI)在80多国家和地区当局协助下,联手打击世界其中一个最大的「僵尸网络」(Botnet).以Citadel木马程式作恶的僵尸网络,控制包括世界各地500万部电脑,并窃取中毒电脑使用者的密 ...
如何将图片内存变小,实际就是改变KB值的大小.工具/原料PS软件或者修图软件一个方法/步骤 ...
散文被人号称形散而神不散,还是有一定道理的,好的散文读起来就让人神清气爽,心情畅快.看似随 ...
沼气是制作沼气喷气背包的必备材料,也可以用于发电.工具/原料流体/固体装罐机一台打粉机一台 ...
面食是北方的传统主食,但这个说法似乎不太适用于面条,如今南方的面店越来越多,小编的午餐基本 ...
缴纳电费,这是我们日常生活中不可或缺的必办事项,现在网络上已经有了好几种缴纳电费方式,今天 ...
平常我们喜欢QQ视频方式,和亲友们视频聊天,那如何录制QQ聊天视频?面对互联网上搜到的良莠 ...
爱情是美好的,它带给我们浪漫的惊喜,带给我们甜蜜的依靠,也带给我们幸福的相守.然而不是生活 ...

我要回帖

更多关于 scrapy 增量爬取 的文章

 

随机推荐