这是带有python 2.7的Windows 7
我在一个名为caps的目录中有一个scrapy项目(这是scrapy.cfg所在的位置)
我的蜘蛛位于caps\caps\spiders\campSpider.py中
我进入scrapy项目并尝试运行
scrapy crawl campSpider -o items.json -t json
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,指出无法找到蜘蛛.班级名称是 campSpider
...
spider = self.crawler.spiders.create(spname, **opts.spargs)
File "c:\Python27\lib\site-packages\scrapy-0.14.0.2841-py2.7-win32.egg\scrapy\spidermanager.py", l
ine 43, in create
raise KeyError("Spider not found: %s" % spider_name)
KeyError: 'Spider not found: campSpider'
Run Code Online (Sandbox Code Playgroud)
我错过了一些配置项吗?
通过pip安装Scrapy后,有Python 2.7.10:
scrapy
Traceback (most recent call last):
File "/usr/local/bin/scrapy", line 7, in <module>
from scrapy.cmdline import execute
File "/Library/Python/2.7/site-packages/scrapy/__init__.py", line 48,
in <module>
from scrapy.spiders import Spider
File "/Library/Python/2.7/site-packages/scrapy/spiders/__init__.py",
line 10, in <module>
from scrapy.http import Request
File "/Library/Python/2.7/site-packages/scrapy/http/__init__.py", line
12, in <module>
from scrapy.http.request.rpc import XmlRpcRequest
File "/Library/Python/2.7/site-packages/scrapy/http/request/rpc.py",
line 7, in <module>
from six.moves import xmlrpc_client as xmlrpclib
ImportError: cannot import name xmlrpc_client
Run Code Online (Sandbox Code Playgroud)
但我可以导入模块:
Python 2.7.10 (default, Jun 10 2015, 19:42:47)
[GCC 4.2.1 Compatible Apple LLVM …Run Code Online (Sandbox Code Playgroud) 如果条件为真,则有可能在特定情况下停止抓取(例如scrap_item_id == predefine_value).我的问题类似于Scrapy - 如何识别已经刮掉的网址,但是我想在发现最后一个被抓住的项目后"强迫"我的scrapy蜘蛛停止爬行.
我没有特定的代码问题我只是不确定如何使用Scrapy框架在逻辑上处理以下问题:
我想要抓取的数据结构通常是每个项目的表格行.直截了当,对吧?
最终,我想要删除每一行的标题,截止日期和详细信息. 标题和截止日期可立即在页面上找到...
但是细节本身不在表格中 - 而是指向包含细节的页面的链接(如果这里没有意义,那么这是一个表格):
|-------------------------------------------------|
| Title | Due Date |
|-------------------------------------------------|
| Job Title (Clickable Link) | 1/1/2012 |
| Other Job (Link) | 3/2/2012 |
|--------------------------------|----------------|
Run Code Online (Sandbox Code Playgroud)
即使在阅读了Scrapy文档的CrawlSpider部分之后,我恐怕仍然不知道如何使用回调和请求在逻辑上传递项目.
这可能是难以回答的问题之一,但这里有:
我不认为我的自编程员 - 但我想:-)我已经学会了R,因为我厌倦了spss,而且因为一位朋友向我介绍了这种语言 - 所以我不是一个完全陌生的人编程逻辑.
现在我想学习python - 主要是做屏幕抓取和文本分析,还用于用Pylons或Django编写webapps.
那么:我应该如何学习使用python进行屏幕刮擦?我开始经历那些杂乱无章的文档,但我觉得很多"魔术"正在进行 - 毕竟 - 我正在努力学习,而不仅仅是做.
另一方面:没有理由重新发明轮子,如果Scrapy要屏蔽Django对网页的影响,那么毕竟值得直接进入Scrapy.你怎么看?
哦 - 顺便说一句:屏幕抓取的那种:我想要报道网站(即相当复杂和大的)来提及政治家等等 - 这意味着我需要每天,递增和递归地刮 - 我需要记录结果进入各种各样的数据库 - 这引出了一个奖励问题:每个人都在谈论非SQL数据库.我是否应该立即学会使用例如mongoDB(我认为我不需要强烈的一致性),或者我想做什么是愚蠢的?
感谢您的任何想法 - 如果这是一般被认为是一个编程问题,我道歉.
在我之前的问题中,我对我的问题并不是非常具体(使用Scrapy进行经过身份验证的会话),希望能够从更一般的答案中推断出解决方案.我应该更喜欢使用这个词crawling.
所以,到目前为止我的代码是:
class MySpider(CrawlSpider):
name = 'myspider'
allowed_domains = ['domain.com']
start_urls = ['http://www.domain.com/login/']
rules = (
Rule(SgmlLinkExtractor(allow=r'-\w+.html$'), callback='parse_item', follow=True),
)
def parse(self, response):
hxs = HtmlXPathSelector(response)
if not "Hi Herman" in response.body:
return self.login(response)
else:
return self.parse_item(response)
def login(self, response):
return [FormRequest.from_response(response,
formdata={'name': 'herman', 'password': 'password'},
callback=self.parse)]
def parse_item(self, response):
i['url'] = response.url
# ... do more things
return i
Run Code Online (Sandbox Code Playgroud)
如您所见,我访问的第一页是登录页面.如果我还没有通过身份验证(在parse函数中),我会调用我的自定义login函数,该函数会发布到登录表单.然后,如果我我验证,我想继续爬行.
问题是parse我试图覆盖的功能以便登录,现在不再进行必要的调用来刮掉任何其他页面(我假设).而且我不确定如何保存我创建的项目.
以前有人做过这样的事吗?(验证,然后爬行,使用a CrawlSpider)任何帮助将不胜感激.
这是我的蜘蛛
from scrapy.contrib.spiders import CrawlSpider,Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from vrisko.items import VriskoItem
class vriskoSpider(CrawlSpider):
name = 'vrisko'
allowed_domains = ['vrisko.gr']
start_urls = ['http://www.vrisko.gr/search/%CE%B3%CE%B9%CE%B1%CF%84%CF%81%CE%BF%CF%82/%CE%BA%CE%BF%CF%81%CE%B4%CE%B5%CE%BB%CE%B9%CE%BF']
rules = (Rule(SgmlLinkExtractor(allow=('\?page=\d')),'parse_start_url',follow=True),)
def parse_start_url(self, response):
hxs = HtmlXPathSelector(response)
vriskoit = VriskoItem()
vriskoit['eponimia'] = hxs.select("//a[@itemprop='name']/text()").extract()
vriskoit['address'] = hxs.select("//div[@class='results_address_class']/text()").extract()
return vriskoit
Run Code Online (Sandbox Code Playgroud)
我的问题是返回的字符串是unicode,我想将它们编码为utf-8.我不知道哪种方法最好.我尝试了几种没有结果的方法.
先感谢您!
如何在Scrapy的parse()功能中获取请求URL ?我有很多网址start_urls,其中一些将我的蜘蛛重定向到主页,结果我有一个空项目.所以我需要item['start_url'] = request.url存储这些网址的东西.我正在使用BaseSpider.
这不再适用了,scrapy的API已经改变了.
现在文档的功能是" 从脚本运行Scrapy "但我得到ReactorNotRestartable错误.
我的任务:
from celery import Task
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from scrapy.utils.project import get_project_settings
from .spiders import MySpider
class MyTask(Task):
def run(self, *args, **kwargs):
spider = MySpider
settings = get_project_settings()
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()
Run Code Online (Sandbox Code Playgroud) 我试图更新scrapy,当我试图检查版本时,我得到了以下错误
C:\Windows\system32>scrapy version -v
:0: UserWarning: You do not have a working installation of the service_identity
module: 'No module named service_identity'. Please install it from <https://pyp
i.python.org/pypi/service_identity> and make sure all of its dependencies are sa
tisfied. Without the service_identity module and a recent enough pyOpenSSL to s
upport it, Twisted can perform only rudimentary TLS client hostname verification
. Many valid certificate/hostname mappings may be rejected.
Scrapy : 0.22.2
lxml : 3.2.3.0
libxml2 : 2.9.0
Twisted : 14.0.0
Python …Run Code Online (Sandbox Code Playgroud)