为什么只有一个导致循环scrapy

时间:2016-05-30 06:36:42

标签: python loops scrapy

我正在尝试使用 scrapy 抓取一些内部有很多链接的页面,但到目前为止我的现有代码只显示第一个链接的内容。

我犯了什么错误?

from scrapy.spiders import BaseSpider
from scrapy.spiders import Spider
from scrapy.http.request import Request
from scrapy.selector import Selector
from Proje.items import ProjeItem

class ProjeSpider(BaseSpider):
    name = "someweb"
    allowed_domains = ["someweb.com"]
    start_urls = [
        "http://someweb.com/indeks/"
    ]

def parse(self, response):
    for sel in response.xpath('//ul[@id="indeks-container"]'):
        for tete in sel.xpath('//linkkk').re('//linkkk.*?(?=")'):
           links = 'http:'+str(tete)
           req = Request(links,callback=self.kontene)
           return req

def kontene(self, response):
    for mbuh in response.xpath('//head'):
        Item = ProjeItem()
        Item['title'] = mbuh.xpath('//title/text()').extract()
        yield Item

2 个答案:

答案 0 :(得分:1)

问题是您的return循环中有for个声明。在Python中,return将返回该函数,仅为您提供第一个值得内容的链接。相反,请考虑将req添加到返回的对象列表中。

def parse(self, response):
    req_list = []
    for sel in response.xpath('//ul[@id="indeks-container"]'):
        for tete in sel.xpath('//linkkk').re('//linkkk.*?(?=")'):
           links = 'http:'+str(tete)
           req = Request(links,callback=self.kontene)
           req_list += req
    return req_list

答案 1 :(得分:1)

根据sc Request return的scrapy文档,即列表或生成器。只需将yield更改为def parse(self, response): for sel in response.xpath('//ul[@id="indeks-container"]'): for tete in sel.xpath('//linkkk').re('//linkkk.*?(?=")'): links = 'http:'+str(tete) req = Request(links,callback=self.kontene) yield req 即可按预期运行:

{{1}}