【问题标题】:INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)信息:爬取 0 页(以 0 页/分钟),抓取 0 项(以 0 项/分钟)
【发布时间】:2018-06-20 21:45:53
【问题描述】:

我刚开始学习 Python 和 Scrapy。 我的第一个项目是在包含网络安全信息的网站上抓取信息。但是当我使用 cmd 运行它时,它说“抓取了 0 页(以 0 页/分钟),抓取了 0 个项目(以 0 个项目/分钟)”,但似乎没有任何结果。如果有人能解决我的问题,我将不胜感激。

我的代码:

import scrapy

class SapoSpider(scrapy.Spider):
name = "imo"
allowed_domains = ["imovirtual.com"]
start_urls = ["https://www.imovirtual.com/arrendar/apartamento/lisboa/"]

def parse(self,response):
    subpage_links = []
    for i in response.css('div.offer-item-details'):
        youritem = {
        'preco':i.css('span.offer-item title::text').extract_first(),
        'autor':i.css('li.offer-item-price::text').extract(),
        'data':i.css('li.offer-item-area::text').extract(),
        'data_2':i.css('li.offer-item-price-perm::text').extract()
        }
        subpage_link = i.css('header[class=offer-item-header] a::attr(href)').extract()
        subpage_links.extend(subpage_link)

        for subpage_link in subpage_links:
            yield scrapy.Request(subpage_link, callback=self.parse_subpage, meta={'item':youritem})

def parse_subpage(self,response):
    for j in response.css('header[class=offer-item-header] a::attr(href)'):
        youritem = response.meta.get('item')
        youritem['info'] = j.css(' ul.dotted-list, li.h4::text').extract()
        yield youritem

【问题讨论】:

  • 你在哪里使用start_urls
  • 可能无处...我应该在哪里使用它?

标签: python css scrapy web-crawler


【解决方案1】:

要使其正常工作,需要纠正两件事:

这应该可行:

import scrapy


class SapoSpider(scrapy.Spider):
    name = "imo"
    allowed_domains = ["imovirtual.com"]
    start_urls = ["https://www.imovirtual.com/arrendar/apartamento/lisboa/"]
    custom_settings = {
        'FEED_URI': './output.json'
    }
    def parse(self,response):
        subpage_links = []
        for i in response.css('div.offer-item-details'):
            youritem = {
            'preco':i.css('span.offer-item title::text').extract_first(),
            'autor':i.css('li.offer-item-price::text').extract(),
            'data':i.css('li.offer-item-area::text').extract(),
            'data_2':i.css('li.offer-item-price-perm::text').extract()
            }
            subpage_link = i.css('header[class=offer-item-header] a::attr(href)').extract()
            subpage_links.extend(subpage_link)

            for subpage_link in subpage_links:
                yield scrapy.Request(subpage_link, callback=self.parse_subpage, meta={'item':youritem})

    def parse_subpage(self,response):
        youritem = response.meta.get('item')
        youritem['info'] = response.css(' ul.dotted-list, li.h4::text').extract()
        yield youritem

【讨论】:

  • 谢谢你的帮助 :) 但是我仍然有不能从这行代码中获取信息的问题:“response.css ('ul.dotted-list, li.h4 ::文本')。提取()“。从这一行打印的是 ul.dotted-list
  • information
  • 我希望它只显示信息......我该怎么做?还有一个问题,如果我想插入更多信息以从子页面中提取,只需在相同的正确代码中添加更多信息?
  • 所以你应该用response.css(' ul.dotted-list li::text').extract()替换它。是的,如果你想获得更多信息,你可以把它放在youritem 例如youritem['title']=response.xpath('//h1[@itemprop="name"]/text()').extract_first()
  • 谢谢你的帮助 :) 你能帮我做一件事吗?我需要始终更新数据库,这是因为爬虫一直在更新,我该如何同步爬虫?有什么建议吗?
  • 同步爬虫是什么意思?如果我理解得很好,您希望数据中的数据仍然是最新的,不是吗?
  • 我不认为在不不断刮擦的情况下始终保持最新是不可能的。但我认为一个好的做法是每天刮一下,即使你至少每天都会更新。
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签