【问题标题】:Scraping links with Scrapy使用 Scrapy 抓取链接
【发布时间】:2018-04-06 14:04:29
【问题描述】:

我正在尝试抓取瑞典房地产网站 www.booli.se 。但是,我不知道如何跟踪每所房子的链接并提取例如价格、房间、年龄等。我只知道如何抓取一页,我似乎无法解决这个问题。我想做类似的事情:

for link in website:
    follow link
    attribute1 = item.css('cssobject::text').extract()[1]
    attribute2 = item.ss('cssobject::text').extract()[2]
    yield{'Attribute 1': attribute1, 'Attribute 2': attribute2}

这样我就可以抓取数据并将其输出到 excel 文件中。我在不使用链接的情况下抓取简单页面的代码如下:

import scrapy

class BooliSpider(scrapy.Spider):
    name = "boolidata"
    start_urls = [
        'https://www.booli.se/slutpriser/lund/116978/'
    ]
    '''def parse(self, response):
        for link in response.css('.nav-list a::attr(href)').extract():
            yield scrapy.Request(url=response.urljoin(link), 
callback=self.collect_data)'''

    def parse(self, response):
        for item in response.css('li.search-list__item'):
            size = item.css('span.search-list__row::text').extract()[1]
            price = item.css('span.search-list__row::text').extract()[3]
            m2price = item.css('span.search-list__row::text').extract()[4]

            yield {'Size': size, 'Price': price, 'M2price': m2price}

感谢您的帮助。真的很难将所有内容放在一起并将特定链接内容输出到有凝聚力的输出文件 (excel)。

【问题讨论】:

  • 您没有从以前的帖子中选择任何答案,即使您有符合条件的答案,为什么?

标签: python python-3.x web-scraping scrapy web-crawler


【解决方案1】:

您可以使用 scrapy 的 CrawlSpider 来关注和抓取链接

您的代码应如下所示:

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spider import CrawlSpider, Rule


class BooliItem(scrapy.Item):
    size = scrapy.Field()
    price = scrapy.Field()
    m2price = scrapy.Field()


class BooliSpider(CrawlSpider):
    name = "boolidata"
    start_urls = [
        'https://www.booli.se/slutpriser/lund/116978/',
    ]

    rules = [
        Rule(
            LinkExtractor(
                allow=(r'listing url pattern here to follow'),
                deny=(r'other url patterns to deny'),
            ),
            callback='parse_item',
            follow=True,
        ),
    ]

    def parse_item(self, response):
        item = BooliItem()
        item['size'] = response.css('size selector').extract()
        item['price'] = response.css('price selector').extract()
        item['m2price'] = response.css('m2price selector').extract()

        return item

您可以通过以下方式运行您的代码:

scrapy crawl booli -o booli.csv

并将您的 csv 导入 Excel。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多