如何使用剪贴板从多个数据中抓取数据?

时间:2016-03-14 09:16:13

标签: python scrapy

我想使用剪贴板从多个数据中获取数据。起始网址是

  

https://gold.jgi.doe.gov/projects?page=1&Project.Project+Name=man&count=25

而且我不知道如何一次性添加1到url属性" page"。

我已尝试将所有网址添加到变量" start_urls",代码如下:

from scrapy.spiders import Spider,Request
from scrapy.selector import Selector

from dirbot.items import GenDis


class GDSpider(Spider):
    name = "GenDis"
    allowed_domains = ["gold.jgi.doe.gov"]
    item = []
    for i in range(1,10):
        url = "https://gold.jgi.doe.gov/projects?page="+str(i)+"&Project.Project+Name=man&count=25"
        item.append(url)

    start_urls = item
    print start_urls


     def parse(self, response):
        sel = Selector(response)
        sites = sel.xpath('//tr[@class="odd"]|//tr[@class="even"]')
        items = []

        for site in sites:
            item = GenDis()
            item['Id'] = site.xpath('td/a/text()').extract()
            item['Link'] = site.xpath('td/a/@href').extract()
            item['Name'] = map(unicode.strip, site.xpath('td[2]/text()').extract())
            item['Status'] = map(unicode.strip, site.xpath('td[3]/text()').extract())
            item['Add_Date'] = map(unicode.strip, site.xpath('td[4]/text()').extract())
            items.append(item)
            return items

但有一个问题是我只能从每个页面获取一个数据,但每页有25个数据。 所以任何人都可以告诉我问题是什么,或告诉我如何每次添加1到基本网址。 非常感谢。

1 个答案:

答案 0 :(得分:2)

尝试使用yield items代替return items。返回结束你的for循环,但yield是一个生成器,并允许for循环继续。

同时删除for循环中对items的引用,只删除yield item,否则items对象将会多次出现,其中包含不断增加的重复项目列表。