Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对从Python脚本中运行Scrapy感到困惑

对从Python脚本中运行Scrapy感到困惑
EN

Stack Overflow用户
提问于 2013-07-10 07:00:45
回答 3查看 6.1K关注 0票数 6

遵循document,我可以从Python脚本运行scrapy,但我无法获得scrapy结果。

这是我的蜘蛛:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from items import DmozItem

class DmozSpider(BaseSpider):
    name = "douban" 
    allowed_domains = ["example.com"]
    start_urls = [
        "http://www.example.com/group/xxx/discussion"
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        rows = hxs.select("//table[@class='olt']/tr/td[@class='title']/a")
        items = []
        # print sites
        for row in rows:
            item = DmozItem()
            item["title"] = row.select('text()').extract()[0]
            item["link"] = row.select('@href').extract()[0]
            items.append(item)

        return items

注意最后一行,我尝试使用返回的解析结果,如果我运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 scrapy crawl douban

终端可以打印返回结果

但是我无法从Python脚本中获得返回结果。下面是我的Python脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy.settings import Settings
from scrapy import log, signals
from spiders.dmoz_spider import DmozSpider
from scrapy.xlib.pydispatch import dispatcher

def stop_reactor():
    reactor.stop()
dispatcher.connect(stop_reactor, signal=signals.spider_closed)
spider = DmozSpider(domain='www.douban.com')
crawler = Crawler(Settings())
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
log.msg("------------>Running reactor")
result = reactor.run()
print result
log.msg("------------>Running stoped")

我尝试在reactor.run()中获取结果,但它什么也不返回。

怎样才能得到结果呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-10 07:16:03

终端会打印结果,因为默认日志级别设置为DEBUG

当您从脚本运行爬行器并调用log.start()时,默认日志级别设置为INFO

只需替换:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log.start()

使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log.start(loglevel=log.DEBUG)

更新:

要获得字符串形式的结果,您可以将所有内容记录到一个文件中,然后从文件中读取,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log.start(logfile="results.log", loglevel=log.DEBUG, crawler=crawler, logstdout=False)

reactor.run()

with open("results.log", "r") as f:
    result = f.read()
print result

希望这能有所帮助。

票数 8
EN

Stack Overflow用户

发布于 2014-05-27 14:54:45

我在问自己同样的问题时发现了你的问题,也就是:“我怎样才能得到结果?”由于这个问题在这里没有回答,我努力自己寻找答案,现在我已经找到了,我可以分享它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
items = []
def add_item(item):
    items.append(item)
dispatcher.connect(add_item, signal=signals.item_passed)

或者对于scrapy 0.22 (http://doc.scrapy.org/en/latest/topics/practices.html#run-scrapy-from-a-script),将我的解决方案的最后一行替换为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crawler.signals.connect(add_item, signals.item_passed)

我的解决方案自由地改编自http://www.tryolabs.com/Blog/2011/09/27/calling-scrapy-python-script/

票数 5
EN

Stack Overflow用户

发布于 2014-03-14 09:05:37

在我的示例中,我将脚本文件放在scrapy项目级别,例如,如果是scrapyproject/scrapyproject/spiders,则将其放在scrapyproject/myscript.py

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17564305

复制
相关文章
NLP中对"困惑度"感到困惑?
炼丹笔记干货 作者:时晴 困惑度(Perplexity)在NLP中是个最流行的评估指标,它用于评估语言模型学的到底有多好.但是很多炼丹师可能至今对"困惑度"依然感到困惑,这篇就把这个讲清楚.假设我们要做个对话机器人,它功能很简单,就是你跟它说你冰箱有啥,它告诉你还需要买啥,能一起做出美味佳肴.例如"鸡肉,胡萝卜",它能够立马给出5~6种购物清单,这就类似用一个NLP模型,去预估和"鸡肉和胡萝卜"共现较多的食材.但是这样评估并不全面,真实情况是用这个NLP模型可能会产生很多新菜谱,然后按照新菜谱可能可以创造
炼丹笔记
2021/12/20
1.2K0
NLP中对"困惑度"感到困惑?
httpd – 对Apache的DFOREGROUND感到困惑
所以我刚刚使用Yum在新的CentOS 7服务器上安装了Apache.我之前已经多次安装过Apache,但我从未见过这样:当我现在运行ps aux时,它总是显示出来
双面人
2019/05/31
4.4K0
从Python中运行Excel VBA
有时候,我们可能想要从Python运行Excel VBA宏,特别是当想要运行已有的Excel宏时,这很有用——甚至可以在不打开Excel文件的情况下执行这些VBA宏。
fanjy
2022/04/13
5.7K0
后台运行python脚本
在Linux系统中,可以使用nohup命令将一个进程放到后台运行,并将该进程的输出重定向到一个文件中。以下是在后台运行Python脚本的步骤:
用户8658949
2023/03/04
3.8K0
Python 强制杀死运行中的多进程脚本
拉灯的小手
2023/06/20
2370
pycharm写脚本_pycharm运行python脚本
$ {MONTH_NAME_SHORT} – 月份名称的前3个字母。 示例:1月,2月等
全栈程序员站长
2022/11/17
2.1K0
pycharm写脚本_pycharm运行python脚本
开机自动运行python脚本
3、编辑/usr/lib/systemd/system/rc-local.service,添加如下内容
py3study
2020/01/07
2.9K0
python中scrapy点击按钮
本文介绍了如何用scrapy和selenium实现微博的搜索和页面跳转。首先介绍了使用FormRequest.from_request()函数进行搜索,发现没有效果后,改用selenium实现点击功能。然而,由于账号限制,不能使用cookies登录,因此探索了其他方法实现微博的搜索和页面跳转。最后发现,可以通过规则的方法实现微博的搜索和页面的跳转。
用户1148830
2018/01/03
4.5K0
在Hadoop上运行Python脚本
之前已经配置好了Hadoop以及Yarn,可那只是第一步。下面还要在上面运行各种程序,这才是最重要的。
py3study
2020/01/06
4.2K0
Python 爬虫之Scrapy《中》
Scrapy数据解析主要有两个大类:xpath() 和 css() ,今天这篇文章主要讲解xpath如何解析我们想获取的页面数据。同时Scrapy还给我们提供自己的数据解析方法,即Selector(选择器),Selector是一个可独立使用的模块,我们可以用Selector类来构建一个选择器对象,然后调用它的相关方法如xpaht(), css()等来提取数据,它的常用写法如下:
Wu_Candy
2022/07/04
8640
Python 爬虫之Scrapy《中》
Python 定时运行脚本
#coding=utf-8 import sys import os import datetime import time class ArgsDealwith: def arg_environment(self, args): filepath = ('PYTHON_PATH', 'path') for i in filepath: filename = os.environ.get(i,"%s is null." % i) print '%s:' %
用户7705674
2021/11/02
9370
以脚本形式运行python库
这一个条目的意思是,我们可以使用python3 -m这样的指令,在终端的命令行内运行python的一些仓库。比如我们常用的pip,就可以通过python3 -m pip install numpy这样的操作指令来运行。还有一个比较常见的上传python编译安装包到pypi网站上面的工具twine,可以通过python3 -m twine的方法来使用。本文我们主要探讨一下如何在代码中,实现python3 -m 这种命令行运行的模式。
DechinPhy
2022/09/02
1.1K0
以脚本形式运行python库
Python 定时运行脚本
#coding=utf-8 import sys import os import datetime import time class ArgsDealwith: def arg_environment(self, args): filepath = ('PYTHON_PATH', 'path') for i in filepath: filename = os.environ.get(i,"%s is null." % i) print '%s:' %
用户7718188
2021/11/02
7840
Linux定时运行Python脚本
这里有两种方法进行定时任务添加,分别是crontab -e和编辑/etc/crontab。两种方法的语法也略有不同,/etc/crontab的语法比crontab -e多了一个用户字段。
司夜
2021/11/24
3.3K0
Python 定时运行脚本
#coding=utf-8 import sys import os import datetime import time class ArgsDealwith: def arg_environment(self, args): filepath = ('PYTHON_PATH', 'path') for i in filepath: filename = os.environ.get(i,"%s is null." % i) print '%s:' %
用户7365393
2021/11/01
9110
我们为何对MySQL 8.0的到来感到兴奋!
一大早收到一封oracle官方发来的邮件,邀请我参加mysql改版的网路研讨会。作为一个后端开发者,想必对mysql是非常是熟悉了。下面来聊一聊mysql8.0的新特性。 临时表的改进 在MySQL5.7中,所有的临时表都被创建在一个叫“ibtmp1”的表空间中。另外,临时表的元数据也将存储在内存中(不再存储在frm文件中)。 在MySQL8.0中,使用临时表存储引擎作为临时表(为优化JOIN、UNION等操作而创建的)存储的默认引擎,从而替换掉了原有的内存存储引擎。 新的引擎使得VARCHAR和VARBI
三哥
2018/06/15
1K0
对SMTP协议的一点困惑
大家都知道用账户XXXX@163.com发送邮件到study2y@dormforce.net的时候,是163的服务器通过SMTP协议将邮件发送到DormForce邮箱的,但是163怎么知道DormForce这个邮件系统的IP啊?
深蓝studyzy
2022/06/15
4280
从Excel中运行PPT
这里可以使用下面的PowerPointSlideshow宏从Excel中运行PowerPoint演示文稿。幻灯片放映完成后,可以按Esc键或单击屏幕上的任意位置来显示仍打开的演示文稿。在宏中已放置了注释,以解释代码在执行过程中的作用,并指出可以在何处调整PowerPoint演示文稿的名称、路径位置和幻灯片放映时间。
fanjy
2022/04/13
1.2K0
python window下运行多个独立python脚本
2、写bat文件:Start.bat @echo off ::设置固定目录路径 set dir=D:\file\python\renewcookie.env\Scripts for /r "%dir%" %%a in (*.exe) do taskkill /f /im "%%~nxa" .env\Scripts\activate&&pythonw.exe renewodpcookie.pyw 3、写vbs文件:后台执行 Set ws = CreateObject("Wscript.Shell") WScript.sleep 5000 ws.run "cmd /c Start.bat",0
用户5760343
2019/08/06
1.6K0
点击加载更多

相似问题

对scrapy和Xpath感到困惑

10

Python -对继承感到困惑

12

对python语法感到困惑

24

对python导入感到困惑

21

对python循环感到困惑

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文