Scrapy Spider只返回列表中的最后一项

时间:2019-03-24 06:04:39

标签: web-scraping scrapy web-crawler

我正在构建一个抓取器,以抓取页面并从div中返回多个项目(h3和p标签)。出于某种原因,刮板在被调用时将打印所有“名称”字段,但仅保存页面上最后一项的信息。

这是我的代码:

cxx = ${CXX}
# The flags 
CPPFLAGS := -std=c++11

# The two line below is the flags I used for clang++-8
# CPPFLAGS := -std=c++17 -Ofast -pipe -flto
# LDFLAGS := -flto -pipe -Wl,--icf=all,-O2,--as-needed,--strip-all,--plugin-opt=O3

lab1: lab1.o statfun.o
    $(CXX) $(LDFLAGS) $^ -o $@

statfun.o: statfun.h
lab1.o: statfun.h

.PHONY: clean
    rm -f lab1.o statfun.o lab

有人知道我在做什么错吗?

1 个答案:

答案 0 :(得分:2)

如果您在DevTools中运行//div[@class='fsb v4'],它将仅返回一个元素

所以您必须找到一个选择器来获取所有那些配置文件DIV

class FoodSpider(scrapy.Spider):
    name = 'food'
    allowed_domains = ['https://blog.feedspot.com/food_blogs/']
    start_urls = ['https://blog.feedspot.com/food_blogs/']

    def parse(self, response):
        for blog in response.css("p.trow.trow-wrap"):

            yield {'name': blog.css(".thumb.alignnone::attr(alt)").extract_first(),
                   'link': "https://www.feedspot.com/?followfeedid=%s" % blog.css("::attr(data)").extract_first(),
                   'location': blog.css(".location::text").extract_first(),
                    }