- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
启用 deltafetch 后,scrapy 仍在抓取以前抓取的 url。
系统是RHEL 6.5
[root@hostname ~]# python -V
Python 2.6.6
我已经通过 pip 安装了 deltafetch:
[root@hostname ~]# pip search scrapy
Scrapy - A high-level Python Screen Scraping framework
INSTALLED: 0.18.4
LATEST: 0.22.2
[root@hostname ~]# pip search scrapylib
scrapylib - Scrapy helper functions and processors
INSTALLED: 1.1.3 (latest)
/usr/lib/python2.6/site-packages/scrapylib/deltafetch.py
我已经这样配置了我的 settings.py:
SPIDER_MIDDLEWARES = {
'scrapylib.deltafetch.DeltaFetch': 100,
}
DELTAFETCH_ENABLED = True
DOTSCRAPY_ENABLED = True
当我运行蜘蛛时,DeltaFetch 似乎已启用:
2014-06-20 10:58:00-0400 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware,
DeltaFetch, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
创建 .scrapy 目录:
[user@hostname output]$ ls -al ../.scrapy
total 12
drwxrwxr-x. 3 user user 4096 Jun 20 10:58 .
drwxrwxr-x. 6 user user 4096 Jun 20 10:58 ..
drwxrwxr-x. 2 user user 4096 Jun 20 10:58 deltafetch
正在创建数据库文件:
[user@hostname output]$ ls -al ../.scrapy/deltafetch/
total 16
drwxrwxr-x. 2 user user 4096 Jun 20 10:58 .
drwxrwxr-x. 3 user user 4096 Jun 20 10:58 ..
-rw-rw-r--. 1 user user 12288 Jun 20 10:58 spider.db
[user@hostname deltafetch]$ file spider.db
spider.db: Berkeley DB (Hash, version 9, native byte-order)
[user@hostname deltafetch]$
但是 .db 文件似乎没有状态数据:
[user@hostname deltafetch]$ python
Python 2.6.6 (r266:84292, Nov 21 2013, 10:50:32)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import bsddb
>>> for k, v in bsddb.hashopen("spider.db").iteritems(): print k, v
...
>>>
[user@hostname deltafetch]$ db_dump spider.db
VERSION=3
format=bytevalue
type=hash
db_pagesize=4096
HEADER=END
DATA=END
当我再次运行蜘蛛时,所有相同的 url 都被抓取/抓取,即使抓取中有新项目,状态数据库似乎没有得到更新,例如。这是以前抓取的文件:
2014-06-20 11:13:56-0400 [spider] DEBUG: Crawled (200)
<GET http://www.example.com/xxx/xxx/xxx/xxx/xxx.xml>
(referer: None)
我不仅可以从日志中看到文件仍在被抓取,而且我从抓取中创建的 .xml 文件正在重新创建。
我查看了其他相关的 deltafetch 问题,但他们没有解决这个问题,感谢任何帮助。
最佳答案
已解决。
这是因为我认为这可能是 scrapy 中的错误,或者可能只是一个功能。
我的蜘蛛只是简单地抓取一个 web 目录,获取响应主体并将其写入一个文件:
def parse_funstuff(self, response):
filename = response.url.split("/")[-1]
open(filename, 'wb').write(response.body)
就 scrapy/deltafetch 而言,这不是在抓取任何东西。我注意到我在日志中看到了“GET”请求,但没有看到“Scraped from”。
我通过向蜘蛛添加一个项目来解决这个问题,以包含我从正在下载的 xml 文件中提取的任意字段。 Scrapy 现在填充该项目,将其写入 output.xml 文件,下载我所有的目标 xml,并且 deltafetch 按预期工作。
我怀疑如果我将 xml 文件下载写成项目,然后将它们写出到文件中,我就不会遇到这个问题。一旦我弄清楚如何做到这一点(python 和 scrapy 都不是我的专业领域)并对其进行测试,我就可以删除我目前只是用任意提取物填充的项目。
关于python - scrapy deltafetch 配置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24330658/
启用 deltafetch 后,scrapy 仍在抓取以前抓取的 url。 系统是RHEL 6.5 [root@hostname ~]# python -V Python 2.6.6 我已经通过 pi
我在 scrapy 上做了一些工作,现在我的蜘蛛准备好了。但是现在我希望我的蜘蛛只抓取那些在之前的运行中没有抓取过的项目,并且只抓取新的内容。通过实现这一点,我可以减少蜘蛛的运行时间。 在研究这个的时
我是一名优秀的程序员,十分优秀!