在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ scrapy + xpath使用for遍歷節(jié)點只能抓取到最后一個

scrapy + xpath使用for遍歷節(jié)點只能抓取到最后一個

正在學習scrapy框架,使用xpath + for循環(huán)遍歷節(jié)點的方法抓取新聞時出現(xiàn)錯誤,只能抓取頁面的最后一條新聞。請求明白的前輩給講一下怎么為什么,該怎么改正。如下所示:

spider類如下:

# -*- coding: utf-8 -*-
import scrapy
from news.items import NewsItem

class MessageSpider(scrapy.Spider):
    name = 'message'
    allowed_domains = ['www.xinhuanet.com/world']
    #抓取的網(wǎng)址,新華網(wǎng)國際版首頁
    start_urls = ['http://www.xinhuanet.com/world/']

    def parse(self, response):
        items = []
        item = NewsItem()

        for r in response.xpath('//li[@class="clearfix"]'):
            #抓取標題
            item['title'] = r.xpath('./h3/a/text()').extract()
            #抓取簡述
            item['desc'] = r.xpath('string(./p/text())').extract()
            #抓取時間
            item['time'] = r.xpath('./div/span/text()').extract()
            items.append(item)
        return items

pipelines類如下:

# -*- coding: utf-8 -*-
import os

class NewsPipeline(object):
    def process_item(self, item, spider):
        #獲取當前工作目錄
        base_dir = os.getcwd()
        file_name = base_dir + '/message.txt'

        with open(file_name, 'a', encoding='utf-8') as f:
            f.write(str(item['title'])+ '\n')
            f.write(str(item['desc'])+ '\n')
            f.write(str(item['time'])+ '\n\n')
        print(item)
        return item

抓取的結(jié)果如下:

1. 打印抓取結(jié)果,顯示只抓取了最后一條新聞,數(shù)了一下,抓取了34次。

2. 抓取結(jié)果寫入txt中,顯示寫入了最后一條新聞,17次
圖片描述

請明白原因的前輩不吝賜教!感謝?。?/p>

回答
編輯回答
舊酒館

item = NewsItem()
這句放到循環(huán)里面。

2018年2月18日 13:23