印刷'回应'来自scrapy请求

时间:2017-02-15 04:32:25

标签: python python-2.7 scrapy

我正在尝试学习scrapy,在学习教程的同时,我正在尝试进行微调。

我想简单地从请求中获取响应内容。然后我会将响应传递给教程代码,但我无法发出请求并获得响应内容。建议很好

from scrapy.http import Response

url = "https://www.myUrl.com"
response = Response(url=url)
print response # <200 myurl.com> 

# but i want the content! and I cant find the method

3 个答案:

答案 0 :(得分:4)

Scrapy是一个复杂的框架。您不能以您希望的方式创建请求和响应。
Scrapy分为几个部分,例如Downloader部分,它可以在Scheduler部分下载请求计划 - 简而言之,您需要在代码中启动所有这些部分,以便简单地获得这样的请求。

您可以查看整个复杂架构的插图和说明here

enter image description here

你可以做的只是使用scrapy shell命令下载网址内容并让你与之互动:

$ scrapy shell "http://stackoverflow.com"
....
[s] Available Scrapy objects:
[s]   scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s]   crawler    <scrapy.crawler.Crawler object at 0x7f14d9fef5f8>
[s]   item       {}
[s]   request    <GET http://stackoverflow.com>
[s]   response   <200 http://stackoverflow.com>
[s]   settings   <scrapy.settings.Settings object at 0x7f14d8d0f9e8>
[s]   spider     <DefaultSpider 'default' at 0x7f14d8af4f28>
[s] Useful shortcuts:
[s]   fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s]   fetch(req)                  Fetch a scrapy.Request and update local objects 
[s]   shelp()           Shell help (print this help)
[s]   view(response)    View response in a browser
In [1]: len(response.body)
Out[1]: 244649

另一种选择是编写一个蜘蛛并将inspect_response()注入到你的解析函数中。

import scrapy 
from scrapy.shell import inspect_response

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://stackoverflow.com',]

    def parse(self, response):
        inspect_response(response, self)
        # shell will open up here just like from the first example

答案 1 :(得分:0)

我同意granito的事情......指出,即使只是覆盖框架本身,Scrapy可以总结仍然是一个艰难的赌注...你只会在阅读教程时更好地理解!看看你拥有的最好的学习资源是你的逻辑,奉献精神和谷歌。通过你的代码片段,我可以告诉你使用一些bs4,这很棒!你可以在scrapy蜘蛛中使用......我可以告诉你,你真的刚刚开始学习......就像最近一样,没有定义一类蜘蛛或命名它和老兄!没错呢!

至于你关于获取内容的问题,再次讨论任何scrapy教程...... datamining / scrapy只有99.9%这个,选择什么日期如何?

  

使用您定义项目的蜘蛛中的CSS元素&gt;它,使用页面响应或您的变异(您的新更改的&gt;版本关闭),您可以将其导出为收益或返回功能..   对于日志目的,通常会进行更多的打印   这个elmente可能是一个链接,只是文本......文件??

     

以与css相同的方式使用xpath,但结构不同

     

使用正则表达式几乎肯定是必须的,但让我们采取步骤。

...整个数据挖掘是为了提取你的内容,我觉得好像是在抢夺你自己的时刻,所以告诉你。来自官方scrapy文档的教程,被称为引用教程......如果你还有任何问题,那么在该教程中发生了什么,我会分享我的课程(我得到报酬......但是没有你是免费的..) 在这个inro步骤...但是男人......它基本上对css知之甚少..如何使用网络浏览器检查工具,或旧学校它只是查看来源..我真的希望我能帮助,我的书呆子感觉是刺痛,但我可以带你一时顿悟...打赌有些人会...但你没有得到任何正确的答案?

PS:

关于获取内容的第一个问题....比如,所有?整个HTML?身体,只是所有链接,或只是包含X的链接..让我们说是一个简单的博客页面...有文章标题日期,链接图像里面。这一点你知道,就在你说页面内容时,你正在引用页面的本体。你挖掘的数据只会像表达它的格式一样有价值,更重要的是使用数据来对付其他数据来创建分析...如果你只想要整个html源,那么基于数据lol的结论我们的朋友Granito-Whachamacallhim .... response.body

答案 2 :(得分:0)

如果您只想打印所有内容:

print response.text