如果声明不适用于蜘蛛在痒

2024-10-03 17:26:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个Python/小淘气的新手。我试着刮一个网站来练习,基本上我要做的是把所有活跃的公司拉过来,下载到一个CSV文件中。你可以看到我的代码粘贴在下面我添加了一个IF语句,它似乎不起作用,我不确定我做错了什么。在

另外,我认为蜘蛛是爬行网站多次根据其输出。我只希望它在每次运行它时爬网一次。在

仅供参考,我在stackoverflow中搜索了答案,我找到了一些解决方案,但我无法让它们发挥作用。我想这是新手的一部分。在

from scrapy.spider import Spider
from scrapy.selector import Selector
from bizzy.items import BizzyItem

class SunSpider(Spider):
    name = "Sun"
    allowed_domains = ['sunbiz.org']
    start_urls = [
    'http://search.sunbiz.org/Inquiry/CorporationSearch/SearchResults/EntityName/a/Page1'
]


    def parse(self, response):
        sel = Selector(response)
        sites = sel.xpath('//tbody/tr')
        items = []
        for site in sites:
            item = BizzyItem()
            item["company"] = sel.xpath('//td[1]/a/text()').extract()
            item["status"] = sel.xpath('//td[3]/text()').extract()
            if item["status"] != 'Active':
                pass
            else:
                items.append(item)
        return items

Tags: fromorgimport网站responseitemsitemselector
1条回答
网友
1楼 · 发布于 2024-10-03 17:26:00

爬行多次?在

我现在已经有时间阅读了你的代码,并浏览了你试图获取的站点的源代码。首先,我可以告诉你,从我承认的有限的经验与刮痧,你的蜘蛛没有爬行网站多次。你所经历的只是调试输出的噩梦般的墙,那些蹩脚的开发人员认为默认情况下快速输出是个好主意。:)

如果你通读它,它实际上是非常有用的信息,如果你能学会识别模式,你几乎可以在它飞驰而过的时候读到它。我相信他们正确地使用了stderr,所以如果您在Unix-y环境中,您可以始终使用scrapy crawl myspider -o output.json -t json 2&>/dev/null(IIRC)使其静音。在

神秘的if语句

由于extract对可能返回多个元素的选择器进行操作的性质,它返回一个list。如果要打印结果,即使在xpath中选择了text(),你会发现它是这样的:

[u'string']  # Note the brackets
#^ no little u if you are running this with Python 3.x

您需要该列表的第一个元素(唯一的成员)[0]。幸运的是,您可以将它直接添加到已经为extract构造的方法链中:

^{pr2}$

然后(假设您的xpath是正确的—我没有检查它),您的条件应该按预期的方式运行。(任何大小的列表永远不会等于字符串,因此您总是pass。)

相关问题 更多 >