【问题标题】:Printing object hex value instead of value打印对象十六进制值而不是值
【发布时间】:2018-04-24 22:39:01
【问题描述】:

使用 python 3.5。

当我下面的代码打印出bs.parse() 时,它会显示对象的十六进制值,而不是bs.parse 的值。

我在这里做错了什么?

class BrickSetSpider(scrapy.Spider):
    name = "website_spider"

    site_search_url = 'website.com'

    website_base = 'http://www.websitenew.com/search?id=site:'
    start_urls = [website_base + site_search_url]
    def parse(self, response):
        website_result_list = []
        website_result_page = []

        NEXT_PAGE_SELECTOR = 'a.sb_pagN ::attr(href)'
        next_page = response.css(NEXT_PAGE_SELECTOR).extract_first()
        if next_page:
            yield scrapy.Request(
                response.urljoin(next_page),
                callback=self.parse,
        headers={'referer':self.start_urls}
            )
            website_result_page.append(response.urljoin(next_page)) 

        #create LIST into SET to remove duplicates then change SET back to LIST.
        set(website_result_page)
        list(website_result_page)

        for brp in website_result_page:   
            return("printing brp: " + brp)

bs = BrickSetSpider()
print(bs.parse('200'))

返回: <generator object BrickSetSpider.parse at 0x7f6f609c8f10>

【问题讨论】:

  • 你的parse() 方法是一个生成器函数,因为它使用yield,所以你看到的是正确的。如果您想查看它产生的值,请在for 循环中使用它来查看每个值,将其转换为列表(即results = bs.parse('200')

标签: python python-3.x output


【解决方案1】:

这只是对对象使用通用打印功能。十六进制值是对象的内存地址。由于该对象是一个生成器,您可以先尝试将其转换为列表

print(list(bs.parse('200')))

【讨论】:

    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多